Wenn ich eine DLL-Datei als Referenz in die C # -Anwendung einfüge, wird ein Fehler angezeigt:
Ein Verweis auf die ".... dll" konnte nicht hinzugefügt werden. Bitte stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass es sich um eine gültige Assembly- oder COM-Komponente handelt.
ILDissassembler sagt, dass es keinen gültigen CLR-Header gibt, also versuche ich, ihn mit regsvr32 zu registrieren, und das gibt mir einen weiteren Fehler:
Das Modul "" wurde geladen, aber der Aufruf von DLLRegisterServer schlug mit dem Fehlercode '0x80004005' fehl.
Ich verwende die ultimative VS2010-Version auf einem 64-Bit-Windows 7-Computer. Was könnte das Problem sein?
Vielen Dank für alle Hinweise / Antworten
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
irgendwelche Vorschläge?Sie können einem Projekt nur dann eine DLL (oder EXE) hinzufügen, wenn es sich um eine .NET-Assembly handelt. Wenn dies nicht der Fall ist, wird diese Fehlermeldung angezeigt.
regsvr32 macht auch bestimmte Annahmen über die Struktur und die exportierte Funktion in der DLL. Es ist eine Weile her, seit ich es verwendet habe, aber es hat mit der Registrierung von COM-Servern zu tun, sodass bestimmte Einstiegspunkte verfügbar sein müssen. Wenn regsvr32 fehlschlägt, stellt die DLL diese Einstiegspunkte nicht bereit und die DLL enthält keine COM-Komponente.
Die einzige Möglichkeit, die DLL zu verwenden, besteht darin, sie wie jede andere Nicht-.NET-Binärdatei zu importieren, z. B. wenn Sie bestimmte Win32-APIs verwenden. Es gibt einen alten Artikel im MSDN-Magazin, der hilfreich sein könnte. Informationen zum Bezugsquellen des Artikels finden Sie im folgenden Update.
Update 12. März 2018: Der Link zum MSDN-Magazin funktioniert nicht mehr wie im August 2010. Der Artikel von Jason Clark trägt den Titel ".NET-Spalte: Aufrufen von Win32-DLLs in C # mit P / Invoke". Es wurde in der Juli 2010 Ausgabe des MSDN Magazine veröffentlicht. Die "Wayback Machine" hat den Artikel hier im Moment (Formatierung ist begrenzt). Die gesamte Ausgabe des MSDN-Magazins vom Juli 2010 finden Sie hier (nur HCM-Format, Anweisungen zur Verwendung von HCM-Dateien hier ).
quelle
Ich habe Dependency Walker verwendet, um die internen Referenzen der DLL zu überprüfen. Es stellte sich heraus, dass die VB-Laufzeit msvbvm60.dll benötigt wurde, und da meine Entwicklungsbox diese nicht installiert hat, konnte ich sie nicht mit regsvr32 registrieren
Das scheint vorerst die Antwort auf meine ursprüngliche Frage zu sein.
quelle
Stellen Sie sicher, dass Ihr Compiler auf x86 eingestellt ist, wenn Sie versuchen, auf eine x86-DLL zu verweisen ...
Ich hatte ähnliche Probleme ... wie oben erwähnt, als ich versuchte, mit OLEDB über meinen C # -Code in Visual Studio 2012 auf eine Excel-Datei zuzugreifen.
Ich bekam immer wieder Fehler, dass die Access-Bibliothek nicht zugänglich war, aber ich wusste, dass ich sie geladen hatte.
Während des Debuggens wurde mir klar, dass ich für 64-Bit kompiliere, aber Office x86 geladen habe. Obwohl ich die Access-Bibliothek für 32 Bit geladen habe, wurde sie von der App nie verwendet ... und war daher nicht zugänglich.
Folgendes habe ich in C # verwendet:
"Provider = Microsoft.ACE.OLEDB.12.0; Datenquelle =" + strFilePath + "; Erweiterte Eigenschaften = 'Excel 12.0 Xml; HDR = Ja'";
... Ich habe einen Fehler bekommen
Sobald ich den Compiler auf x86 umgestellt habe, hat es funktioniert
quelle
Ich bin gerade auf dieses Problem gestoßen und nach all den Erklärungen zum Beheben mit der Eingabeaufforderung habe ich festgestellt, dass Sie, wenn Sie es direkt zum Projekt hinzufügen, einfach die Bibliothek auf jeder Seite einfügen können, die benötigt wird
quelle
Ich habe das gleiche Problem beim Importieren von WinSCard.dll in mein Projekt. Ich beschäftige mich mit dem Import direkt aus der DLL wie folgt:
Sie können dies zu einem separaten Projekt hinzufügen und dann eine Referenz aus Ihrem Hauptprojekt hinzufügen.
quelle
Ich hatte dieses Problem, nachdem mein PC während der Erstellung der Lösung neu gestartet wurde. Meine beiden Referenzen waren weg, daher musste ich meine beiden Projekte manuell neu erstellen und konnte dann ohne Fehler Referenzen hinzufügen.
quelle
Sie können keinen Verweis auf eine native DLL hinzufügen . Sie können sie jedoch in die Lösung aufnehmen (Rechtsklick auf Lösung, wählen Sie "Vorhandene Datei hinzufügen"), aber sie werden nur referenziert, wenn Sie so etwas deklarieren
Vielleicht gibt es eine Art Wrapper- DLL, auf die Sie tatsächlich verweisen und die die DLL-Importe enthält.
Manchmal verweisen Sie möglicherweise auf die Wrapper-DLL, können Ihr Programm jedoch nicht ausführen. Die Fehleraufforderung schlägt vor, sicherzustellen, dass die Datei vorhanden ist und alle Abhängigkeiten verfügbar sind.
Dieses Problem liegt daran, dass die Assembly, die Sie hinzufügen möchten, nur für eine x86- oder x64- Prozessorarchitektur ausgewählt und kompiliert wird .
Versuchen Sie einfach, die Zielplattform in Build -> Configuration Manager auf x86 oder x64 zu ändern .
quelle
Ich musste die Architektur im Konfigurationsmanager von x64 auf x86 ändern und meine 32-Bit-DLL (C-Sprache - pcProxAPI.dll) in einen neuen Ordner kopieren, der erstellt wurde. Dies ist zusätzlich zu den von "Sashus" unten beschriebenen Schritten .
C: \ Projekte .. \ bin \ x86 \ Debug
quelle
Ich hatte das gleiche Problem, als ich versuchte, meinem neuen C # -Projekt eine gerade in C ++ codierte DLL hinzuzufügen. Es stellte sich heraus, dass ich Eigenschaften des C ++ - Projekts festlegen musste, aus dem meine DLL stammt:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Weil das C # -Projekt, in dem ich diese DLL verwenden wollte, auch so eingestellt war (hatte die gleichen Eigenschaften eingestellt
/clr
).quelle
Ich hatte ein ähnliches Problem. Ich habe versucht, die Referenz einer .net 2.0-DLL zu einem .Net 1.1-Projekt hinzuzufügen. Als ich versuchte, eine frühere Version der DLL hinzuzufügen, die in .Net 1.1 eingehalten wurde. es hat bei mir funktioniert.
quelle
Wenn Sie in dieser Angelegenheit Hilfe suchen oder eine FileNotFoundException oder eine FirstChanceException haben, lesen Sie meine Antwort hier:
In mscorlib.ni.dll - Windows Phone ist eine erste Chance vom Typ 'System.IO.FileNotFoundException' aufgetreten
Im Allgemeinen müssen Sie absolut sicher sein, dass Sie alle Anforderungen für die Erstellung der Referenz erfüllen - ich weiß, dass dies die offensichtliche Antwort ist, aber Sie übersehen wahrscheinlich eine relativ einfache Anforderung.
quelle
Ich hatte diesen Fehler beim Schreiben eines Windows-Dienstes. Ich habe Visual Studio als Administrator ausgeführt, damit meine Post-Build-Befehle meinen Dienst automatisch installieren. Ich bemerkte, dass ich, wenn ich alles schloss und VS normal ausführte (nicht als Administrator), die Referenzen ohne Fehler hinzufügen konnte.
Hoffe, diese Lösung funktioniert für Sie.
quelle
Normalerweise sollten Sie in Visual Studio 2015 das DLL-Projekt als C ++ -> CLR-Projekt aus den Vorlagen von Visual Studio erstellen. Sie können es jedoch nachträglich technisch aktivieren:
Die kritische Eigenschaft wird
Common Language Runtime Support
in der Konfiguration Ihres Projekts als festgelegt bezeichnet. Es ist unter gefundenConfiguration Properties > General > Common Language Runtime Support
.Dabei wird VS die Option 'Target .NET Framework' wahrscheinlich nicht aktualisieren (wie es sollte). Sie können dies manuell hinzufügen, indem Sie Ihr Projekt entladen, die Datei your_project.xxproj bearbeiten und das
Target .NET framework Version
XML-Tag hinzufügen / aktualisieren .Als Beispiel schlage ich vor, eine neue Lösung als C ++ - CLR-Projekt zu erstellen und das XML dort zu untersuchen, vielleicht sogar zu unterscheiden, um sicherzustellen, dass es nichts sehr Wichtiges gibt, das ungewöhnlich ist.
quelle
Meine Antwort ist etwas spät, aber stellen Sie als schnellen Test sicher, dass Sie die neueste Version der Bibliotheken verwenden.
In meinem Fall verschwand das Problem nach dem Aktualisieren einer Nuget-Bibliothek, die auf eine andere Bibliothek verwies, die das Problem verursachte.
quelle
Sie können die DLL-Datei manuell hinzufügen. Zum Beispiel, wenn Sie eine DLL-Datei in Ihre WPF-Anwendung einfügen möchten und diese in Ihrem Projekt nicht referenzieren können
(Fehlermeldung: Ein Verweis auf die ".... dll" konnte nicht hinzugefügt werden. Bitte stellen Sie sicher, dass auf die Datei zugegriffen werden kann und dass es sich um eine gültige Assembly- oder COM-Komponente handelt.)
Kopieren Sie dann diese DLL-Datei und fügen Sie sie in das Installationsprojekt ein (im Anwendungsordner).
quelle
quelle