2012-06-19 14 views
6

Per prima cosa ho un controllo ActiveX di terze parti che devo usare.Impossibile tacitare Avvertenze Interop

Avanti Devo usare la libreria stdole per alimentare quella terza parte per controllare alcune immagini. Quando compilo sotto le impostazioni di default, ottengo alcune avvertenze:

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. 

abbastanza facile, io seguire questo consiglio e impostare i tipi di incorporare Interop su false per il riferimento stdole. Tutto sembra bene fino a quando vado alla macchina client ora, quando improvvisamente l'applicazione sta gettando questa:

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. 

Quindi, credo che questo non succederà mai (anche se non sono sicuro perché la rimozione di incorporare interoperabilità su stdole ha l'effetto di rendere la biblioteca introvabile del tutto).

Bene, andiamo dall'altra parte e contrassegniamo tutto con Interop. OOPS! Errore di compilazione:

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 

Quindi, qualche consiglio su come sbarazzarsi delle avvertenze e hanno qualcosa che può essere costruito e gestito?

UPDATE

Hans Passant postato come commento una risposta che non effettivamente risolvere il problema. Se lo riporrà come risposta, lo accetterò. Sfortunatamente sto riscontrando anche il problema standard in cui la DLL impostata su Copia locale viene ben copiata nella cartella di rilascio del progetto, ma non si sposta quindi nella cartella di rilascio finale della soluzione (un file eseguibile separato). L'ho risolto per ora aggiungendo un riferimento allo stdole nel mio eseguibile. Suppongo che sia probabilmente abbastanza buono.

+3

Non è possibile incorporare tipi per un componente ActiveX. Il computer di destinazione manca il PIA per stdole, prova a impostare la proprietà Copia locale su true e copia anche lo stdole.dll generato. –

+0

Hans Passant di nuovo! Sei ovunque, ti ho persino imbattuto in una cosa non correlata prima di oggi. Non so perché Jon Skeet riceve tutta la stampa. Proverò e riferirò. – user12861

+0

@HansPassant vedere aggiornamento alla domanda – user12861

risposta

3

risposta da Hans Passant:

Non è possibile incorporare tipi per un componente ActiveX. Il computer di destinazione manca il PIA per stdole, prova a impostare la proprietà Copia locale su true e copia anche lo stdole.dll generato.

-2

Se si crea un nuovo progetto in VS10, si può utilizzare framework .NET 4 profilo del client di default, è possibile impostare framework di destinazione per .NET Framework 4 in proprietà del progetto -> Application scheda.