11 Stimmen

Unterschiedliche Interop-Referenzen auf zwei verschiedenen Computern funktionieren nicht

Wenn ich einen Verweis auf Microsoft.Office.Interop.Excel auf meinem Computer, fügt Visual Studio dies der Projektdatei hinzu:

<COMReference Include="Excel">
  <Guid>{00020813-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>5</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

Ein anderer Entwickler im Team bekommt Fehler und muss dem Projekt eine DLL-Datei namens Interop.Excel.dll hinzufügen, die den obigen Code in der Projektdatei durch diesen ersetzt:

<Reference Include="Interop.Excel, Version=1.5.0.0, Culture=neutral, processorArchitecture=MSIL">
  <SpecificVersion>False</SpecificVersion>
  <HintPath>My Project\Interop.Excel.dll</HintPath>
</Reference>

Auf meinem Computer funktioniert das.

Könnten Sie bitte die Unterschiede zwischen den beiden Methoden erläutern, welche am besten ist und wie man die erste Methode auf anderen Computern zum Laufen bringt?

12voto

Dirk Vollmar Punkte 166522

Ich sehe auch kein Problem mit Ihrem Ansatz.

Normalerweise generiert VS eine Interop-Assembly für COM-Komponenten automatisch, wenn Sie einen Verweis auf die Komponente hinzufügen. Wenn Sie jedoch einen Verweis auf eine der Office-Komponenten (XP oder eine spätere Version) hinzufügen, wird wie in Ihrem ersten Beispiel ein Verweis auf die vorgenerierte (und optimierte) primäre Interop-Assembly von Microsoft hinzugefügt. Die Zeile

<WrapperTool>primary</WrapperTool>

bedeutet, dass dieser PIA verwendet wird.

Wenn Sie die PIA-Referenz korrekt hinzugefügt haben, wird die KopierenLokal Eigenschaft dieses Verweises sollte auf false gesetzt werden und die Pfad sollte etwa so lauten

C:\WINDOWS\assembly\GAC\Microsoft.Office.Interop.Excel\12.0.0.0__71e9bce111e9429c\Microsoft.Office.Interop.Excel.dll

Weitere Details zu Interop-Assemblies finden Sie in diesem MSDN artículo .

Damit die erste Methode funktioniert, müssen die Office Primary Interop Assemblies (PIAs) auf dem Rechner installiert sein. Es gibt eine weiterverteilbare Version von Microsoft:

AFAIK werden diese PIAs nur dann vom Office-Setup installiert, wenn das .NET Framework bereits installiert wurde, daher gibt es eine separate Weiterverteilungsverordnung für die PIAs.

Hinweis: Achten Sie darauf, dass Sie auf die Version von Office verweisen, auf die Sie abzielen. Wenn Sie auf mehrere Office-Versionen abzielen, kann es jedoch zu Problemen kommen. Eine Lösung könnte in diesem Fall die späte Bindung sein (wenn die Leistung kein Problem darstellt).

0voto

Charles Graham Punkte 23517

Ich habe die Excel-Automatisierung viel öfter verwendet, als ich zugeben möchte, und ich habe nie auf die Interop.Excel.dll verwiesen. Ich habe immer auf die erstere verwiesen. Warum referenziert er das, und welche Fehler erhält er?

Beziehen Sie sich auf dieselbe Version von Excel (5.0 gegenüber 11.0)? Haben Sie die exakt gleiche Version von Office, Servicepakete und alles? Das könnte der Unterschied sein.

-1voto

Ich fand den saubersten Weg, um es zu verwenden, dies ermöglicht auch für mehrere Versionen des interop, ist eine gemeinsame bin erstellen \Office Interop \11 oder 12 \Microsoft.Office.Interop.Excel.dll\ und referenzierte sie aus dem Projekt, funktioniert gut für verschiedene Versionen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X