Frage

Die Technik eines Verweises auf das COM-Interop von Office in Visual Studio für das Hinzufügen gehen zu:

  1. Referenzen
  2. Verweis hinzufügen
  3. Wählen Sie die COM
  4. Wählen Sie Microsoft Office 11.0 Object Library

Und magisch genannt Referenz erscheint:

Microsoft.Office.Core

Die Project.csproj Datei zeigt die Einzelheiten des Bezugs:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

Und das Projekt in der Quellcodeverwaltung überprüft und alles ist gut.


Dann wird ein Entwickler mit Office 2007 wird das Projekt aus der Quellcodeverwaltung, und kann es nicht bauen, weil ein solcher Verweis nicht existiert.

Er (d ich) prüft die CSPROJ Datei aus, löscht den Verweis auf

Microsoft Office 11.0 Object Library

und wieder fügt den COM-Verweis als

Microsoft Office 12.0 Object Library

Und auf magische Weise eine benannte Referenz erscheint:

Microsoft.Office.Core

Die Project.csproj Datei zeigt die Einzelheiten des Bezugs:

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>4</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

Und das Projekt in der Quellcodeverwaltung überprüft und alles ist gut.


Dann wird ein Entwickler mit Office 2003 wird das Projekt aus der Quellcodeverwaltung, und kann es nicht bauen, weil ein solcher Verweis nicht existiert.

Er (das heißt mich nicht) prüft die CSPROJ Datei aus, löscht den Verweis auf

Microsoft Office 12.0 Object Library

und wieder fügt den COM-Verweis als

Microsoft Office 11.0 Object Library

Und auf magische Weise eine benannte Referenz erscheint:

Microsoft.Office.Core

Die Project.csproj Datei zeigt die Einzelheiten des Bezugs:

<COMReference Include="Microsoft.Office.Core">
  <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>3</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

Und das Projekt in der Quellcodeverwaltung überprüft und alles ist gut.

Dann wird das Projekt gebaut, drückte auf CDs , und an den Kunden geschickt, die haben Office 2007 .

Und das alles ist nicht gut.


In den alten Tagen (das heißt vor dll Hölle .NET), würden wir das Büro Referenzobjekte mit einer Version unabhängiger ProgID , d.h .:

"Excel.Application"

, die mit einem löst clsid der installierten Office, z.

{00024500-0000-0000-C000-000000000046}    

, von denen eine Klasse wird dann aufgebaut, um einen Anruf zu COM mit (sprechen netural Pseudo-Code):

public IUnknown CreateOleObject(string className)
{
    IUnknown unk;

    Clsid classID = ProgIDToClassID(className);
    CoCreateInstance(classID, null, 
          CLSCTX_INPROC_SERVER | CLSCTX_LOCAL_SERVER, 
          IUnknown, out unk);

    return unk;
}

Fragen

1) Was ist die bewährte Technik der installierten Office-Anwendungen zu automatisieren?

2) Was ist das Büro 2003 Primary Interop Assemblies geeignet?

3) Wenn ich das Office 2003 Primary Interop Assemblies verwenden, muss ich Office 2003 installiert haben?

4) Wenn ich mit dem Office 2003 Primary Interop Assemblies bauen, sind meine Kunden gebunden zu Office 20003 für immer?

5) Gibt es Office 2007 Primary Interop Assemblies ?

6) Wenn ich das Office 2007 Primary Interop Assemblies installieren muss ich haben Office 2007 installiert?

7) Was stimmt nicht mit Standard-COM-Interop mit Excel, Word oder Outlook fahren? z.

[ComImport]
[Guid("00024500-0000-0000-C000-000000000046")]
public class Excel
{
}

8) Was ist ein Erreichen, wenn man ein fügt

  • Referenz , um Elemente auf der Seite Registerkarte COM ,
  • im Gegensatz zur Verwendung [ComImport],
  • im Gegensatz zur Verwendung der Office 2007 Primary Interop Assemblies

9) Wird das Hinzufügen eines Verweises mit der Registerkarte COM identisch mit COM-Interop , mit der Ausnahme, dass es eine Typbibliothek benötigt , bevor Sie sehen es?

10) ist das Office 2003 Primary Interop Assemblies rückwärts und vorwärts kompatibel mit:  - Büro 14  - Office-2007  - Office 2003  - Office XP  - Office 2000  - Office 97  - Office 95

Wenn ein Kunde und ein Entwickler, eine neue Version von Office installieren, wird es noch?

11) Müssen wir das Office 2003 Primary Interop Assemblies mit unserer Anwendung versenden?

12) Hat der Kunde das Office 2003 Primary Interop Assemblies installieren, bevor sie unsere Anwendung verwenden können?

13) Wenn ein Kunde das Office 2003 Primary Interop Assemblies installiert tun sie Office installiert haben müssen?

14) Wenn ein Kunde das Office installiert 2003 Primary Interop Assemblies haben sie Amt haben 2003 installiert?

15) sind das Office 2003 Primary Interop Baut eine kostenlose lite, verteilbar Version von Office 2003?

16) Wenn meine Entwicklung Maschine Office 2007 hat, kann ich die Office 2003-PIAs und Schiff an einem Kunden mit Office XP installiert?

War es hilfreich?

Lösung 2

Die Antwort ist auf „Copy Local“, was auch immer Assembly-DLL Sie für die Interop bekommen. Sobald Sie den Assembly-DLL in Ihrem Ausgabeordner haben, fügen Sie einen Verweis darauf, und überprüfen Sie es in der Quellcodeverwaltung.

Jetzt hat jeder die referenzierte Assembly dll.

Andere Tipps

Wow, das ist eine große Anzahl von Fragen. Ich denke, dass in der Regel, wenn Ihre App, die PIAs verwendet dann sind Sie davon aus, dass Ihre Zielgruppe eine Version von Office installiert ist. Die PIA wird in dem GAC installiert werden, wenn das Ziel Benutzer installiert Büro. Wenn sie Amt nicht installiert haben, warum dann zielen Sie Office?

Ja, der Office-DLLs der richtige Weg, Büro zu automatisieren. Es gibt eine Liste der Baugruppen hier , einschließlich einige für Office 2007.

verwenden Sie VSTO (Visual Studio Tools für Office)?

http://msdn.microsoft.com/en-us/office /aa905533.aspx

Ein alter Thread, und die meisten Menschen wahrscheinlich mit Copylocal wäre glücklich = True, aber hier ist eine andere Art und Weise .. Verwenden Sie beide (oder mehr ..? Denken Office 2010, wenn das Problem weiterhin besteht ..) Referenzen in Ihren Projektdateien, und entweder ignorieren oder einfach nur MSBuild erzählen die „MSB3284“ zu ignorieren Warnung (Bibliothek nicht gefunden ). So sind diese in Ihrer CSPROJ-Datei:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>3</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

Gefolgt von:

<COMReference Include="Microsoft.Office.Core">
   <Guid>{2DF8D04C-5BFA-101B-BDE5-00AA0044DE52}</Guid>
   <VersionMajor>2</VersionMajor>
   <VersionMinor>4</VersionMinor>
   <Lcid>0</Lcid>
   <WrapperTool>primary</WrapperTool>
   <Isolated>False</Isolated>
</COMReference>

würde mich interessieren zu sehen, ob Microsoft eine NuGet Bibliothek dafür bietet - nur jeder bekommen auf den gleichen Ansatz. Ich denke, dass die Notwendigkeit beseitigen würde für die Menschen im Internet nach diesen Antworten zu suchen ... Ich glaube, das gegen Microsoft Office-Lizenz sein würde, so dass sie die einzigen sind, um es zu liefern.

BTW mit Kopie lokalen Sie müssen vorsichtig sein, nicht diese Bibliothek versehentlich zu verteilen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top