2012-06-19 17 views
6

Zuerst habe ich eine dritte Partei ActiveX-Steuerelement, das ich verwenden muss.Kann nicht stumm Einbinden Interop Warnungen

Als nächstes muss ich die STDOLLE-Bibliothek verwenden, um diese Drittanbieter-Kontrolle einige Bilder zu füttern. Wenn ich unter den Standardeinstellungen zu kompilieren, erhalte ich einige Warnungen:

warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 

Einfach genug, ich, dass die Beratung und für die Stdole Bezug auf false gesetzt Embed Interop-Typen folgen werden. Alles sieht gut aus, bis ich jetzt auf die Client-Maschine gehen, als plötzlich die Anwendung up wirft diese:

Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

Also, ich denke, das ist nicht gonna passieren (obwohl ich bin mir nicht sicher, warum das Entfernen einbetten Interop auf Stdole hat der Effekt, die Bibliothek komplett zu entlarven).

Nun, lassen Sie uns in die andere Richtung gehen und markieren Sie alles mit Embed Interop wahr. OOPS! Kompilierfehler:

Error 2 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 
Error 1 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 

Also, jede Ratschläge, wie der Warnungen loszuwerden und haben etwas, das gebaut und ausgeführt werden kann?

UPDATE

Hans Passant geschrieben als Kommentar eine Antwort, die in der Tat das Problem nicht lösen. Wenn er es als Antwort zurückgibt, akzeptiere ich es. Leider habe ich auch das Standardproblem, bei dem die DLL, die auf Local kopieren gesetzt ist, schön in den Release-Ordner ihres Projekts kopiert wird, aber dann nicht in den endgültigen Release-Ordner für die Lösung (eine separate ausführbare Datei) übergeht. Ich habe das jetzt gelöst, indem ich einen Verweis auf die Stdole in meiner ausführbaren Datei hinzufüge. Ich nehme an, das ist wahrscheinlich gut genug.

+3

Sie können keine Typen für eine ActiveX-Komponente einbetten. Dem Zielcomputer fehlt der PIA für das Stddole. Versuchen Sie, die Eigenschaft Copy Local auf true zu setzen und die generierte stdole.dll ebenfalls zu kopieren. –

+0

Hans Passant wieder! Du bist überall, ich bin dir sogar früher ohne Bezug auf etwas begegnet. Ich weiß nicht, warum Jon Skeet die ganze Presse bekommt. Ich werde es ausprobieren und melden. – user12861

+0

@HansPassant siehe Update auf Frage – user12861

Antwort

3

Antwort von Hans Passant:

Sie können nicht Typen für eine ActiveX-Komponente einbetten. Dem Zielcomputer fehlt der PIA für das Stddole. Versuchen Sie, die Eigenschaft Copy Local auf true zu setzen und die generierte stdole.dll ebenfalls zu kopieren.

-2

Wenn Sie ein neues Projekt in VS10 erstellen, kann .NET Framework 4-Clientprofil als Standard verwendet werden. Sie können das Zielframework auf .NET Framework 4 in Projekteigenschaften -> Anwendung Registerkarte festlegen.