[.net] Non è stato possibile aggiungere un riferimento alla DLL


6 Answers

È possibile aggiungere una DLL (o EXE) a un progetto solo se si tratta di un assembly .NET. Se non lo è, vedrai questo messaggio di errore.

regsvr32 fa anche alcune ipotesi sulla struttura e sulla funzione esportata nella DLL. È passato un po 'di tempo da quando l'ho usato, ma ha a che fare con la registrazione dei server COM, quindi alcuni punti di ingresso devono essere disponibili. Se regsvr32 non riesce, la DLL non fornisce quei punti di ingresso e la DLL non contiene un componente COM.

L'unica possibilità per l'utilizzo della DLL è di importarla come qualsiasi altro binario non- .NET, ad esempio quando si utilizzano determinate API Win32. C'è un vecchio articolo di MSDN Magazine che potrebbe essere utile. Vedere il seguente aggiornamento per informazioni su dove ottenere l'articolo.

Aggiornamento 12 marzo 2018: il collegamento a MSDN Magazine non funziona più come in passato ad agosto 2010. L'articolo di Jason Clark si intitola ".NET Column: Calling DLL Win32 in C # con P / Invoke". È stato pubblicato nel numero di luglio 2010 di MSDN Magazine. La "Wayback Machine" ha l'articolo here al momento (la formattazione è limitata). L'intero numero MSDN Magazine di luglio 2010 è disponibile here (solo formato HCM, istruzioni su come utilizzare i file HCM here ).

Question

Quando aggiungo un file .dll come riferimento nell'applicazione C # mostra un errore:

Non è stato possibile aggiungere un riferimento a ".... dll". Assicurarsi che il file sia accessibile e che sia un assembly valido o un componente COM.

ILDissassembler dice che non c'è un header CLR valido, quindi cerco di registrarlo usando regsvr32 e questo mi dà un altro errore:

Il modulo "" è stato caricato ma la chiamata a DLLRegisterServer non è riuscita con il codice di errore "0x80004005"

Sto usando la versione definitiva di VS2010 su una macchina Windows 7 a 64 bit. Quale potrebbe essere il problema?

Grazie per eventuali suggerimenti / risposte




Ho avuto questo problema dopo che il mio PC è stato riavviato durante la creazione della soluzione. I miei due riferimenti sono andati, quindi ho dovuto ricostruire manualmente i miei due progetti e quindi ho potuto aggiungere riferimenti senza errori.




Ho affrontato un problema simile. Stavo cercando di aggiungere il riferimento di una DLL .net 2.0 a un progetto .Net 1.1. Quando ho provato ad aggiungere una versione precedente del file .dll che era conforme a .Net 1.1. ha funzionato per me




Ho lo stesso problema con l'importazione di WinSCard.dll nel mio progetto. Mi occupo di quella importazione direttamente da dll in questo modo:

[DllImport("winscard.dll")]
public static extern int SCardEstablishContext(int dwScope, int pvReserved1, int pvReserved2, ref int phContext);

[DllImport("winscard.dll")]
public static extern int SCardReleaseContext(int phContext);

È possibile aggiungere questo per separare il progetto e quindi aggiungere un riferimento dal progetto principale.




La mia risposta è un po 'in ritardo, ma come test rapido, assicurati di utilizzare l'ultima versione di librerie.

Nel mio caso, dopo aver aggiornato una libreria di nuget che faceva riferimento a un'altra libreria che causava il problema, il problema era scomparso.




Normalmente in Visual Studio 2015 è necessario creare il progetto dll come progetto C ++ -> CLR dai modelli di Visual Studio, ma tecnicamente è possibile abilitarlo dopo il fatto:

La proprietà critica è denominata Common Language Runtime Support impostato nella configurazione del progetto. Si trova in Configuration Properties > General > Common Language Runtime Support .

Quando si esegue questa operazione, VS probabilmente non aggiornerà l'opzione 'Target .NET Framework' (come dovrebbe). È possibile aggiungere manualmente questo scaricando il progetto, modificando il file your_project.xxproj e aggiungendo / aggiornando il tag XML Target .NET framework Version XML di Target .NET framework Version .

Per un esempio, suggerisco di creare una nuova soluzione come progetto CLR C ++ e di esaminare l'XML lì, magari anche di diffonderla per assicurarmi che non ci sia nulla di molto importante che sia fuori dall'ordinario.




Assicurati che il tuo compilatore sia impostato su x86 se stai provando a fare riferimento a una x86 dll ...

Stavo avendo problemi simili ... come detto sopra, cercando di usare OLEDB per accedere a un file Excel dal mio codice C # in Visual Studio 2012.

Continuavo a ricevere errori sulla libreria Access non accessibile, ma sapevo di averlo caricato.

Durante Debug, mi sono reso conto che sto compilando per 64 bit ma ho caricato Office x86. Anche se ho caricato la libreria Access per 32 bit, non è mai stata utilizzata dall'app ... e quindi non era accessibile.

Ecco cosa stavo usando in C #:

"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + strFilePath + "; Proprietà estesa = 'Excel 12.0 Xml; HDR = Sì'";

... Stavo ricevendo un errore

Non appena ho cambiato il compilatore in x86 ha funzionato




Related