Lorsque j'ajoute un fichier .dll comme référence dans l'application C #, une erreur s'affiche:
Une référence à la ".... dll" n'a pas pu être ajoutée. Assurez-vous que le fichier est accessible et qu'il s'agit d'un assemblage ou d'un composant COM valide.
ILDissassembler dit qu'il n'y a pas d'en-tête CLR valide, alors j'essaie de l'enregistrer en utilisant regsvr32 et cela me donne une autre erreur:
Le module "" a été chargé mais l'appel à DLLRegisterServer a échoué avec le code d'erreur "0x80004005"
J'utilise la version ultime de VS2010 sur une machine Windows 7 64 bits. Quel pourrait être le problème?
Merci pour tous les indices / réponses
TlbImp : error TI0000 : The input file 'c:\Program Files\Microsoft SDKs\Windows\ v7.0A\bin\MyLibrary.dll' is not a valid type library.
suggestions?Vous pouvez ajouter une DLL (ou EXE) à un projet uniquement s'il s'agit d'un assembly .NET. Si ce n'est pas le cas, vous verrez ce message d'erreur.
regsvr32 fait également certaines hypothèses sur la structure et la fonction exportée dans la DLL. Cela fait un moment que je ne l'ai pas utilisé, mais cela a à voir avec l'enregistrement des serveurs COM, donc certains points d'entrée doivent être disponibles. Si regsvr32 échoue, la DLL ne fournit pas ces points d'entrée et la DLL ne contient pas de composant COM.
La seule chance d'utiliser la DLL est de l'importer comme n'importe quel autre binaire non-.NET, par exemple lorsque vous utilisez certaines API Win32. Il existe un ancien article du magazine MSDN qui pourrait être utile. Consultez la mise à jour suivante pour savoir où obtenir l'article.
Mise à jour du 12 mars 2018: Le lien vers le magazine MSDN ne fonctionne plus comme avant en août 2010. L'article de Jason Clark s'intitule «Colonne .NET: Appel de DLL Win32 en C # avec P / Invoke». Il a été publié dans le numéro de juillet 2010 de MSDN Magazine. La "Wayback Machine" a l'article ici pour le moment (le formatage est limité). Le numéro complet de MSDN Magazine de juillet 2010 est disponible ici (format HCM uniquement, instructions d'utilisation des fichiers HCM ici ).
la source
J'ai utilisé le walker de dépendance pour vérifier les références internes de la dll. Il s'avère qu'il avait besoin du runtime VB msvbvm60.dll et comme ma boîte de développement ne l'a pas installé, je n'ai pas pu l'enregistrer en utilisant regsvr32
Cela semble être la réponse à ma question initiale pour le moment.
la source
Assurez-vous que votre compilateur est défini sur x86 si vous essayez de référencer une dll x86 ...
J'avais des problèmes similaires ... comme mentionné ci-dessus, en essayant d'utiliser OLEDB pour accéder à un fichier Excel à partir de mon code C # dans Visual Studio 2012.
J'ai continué à recevoir des erreurs concernant la bibliothèque Access n'étant pas accessible mais je savais que je l'avais chargée.
Pendant le débogage, il m'est apparu que je compile pour 64 bits mais que Office x86 est chargé. Même si j'ai chargé la bibliothèque Access pour 32 bits, elle n'a jamais été utilisée par l'application ... et n'était donc pas accessible.
Voici ce que j'utilisais en C #:
"Provider = Microsoft.ACE.OLEDB.12.0; Data Source =" + strFilePath + "; Extended Properties = 'Excel 12.0 Xml; HDR = Yes'";
... je recevais une erreur
Dès que j'ai basculé le compilateur sur x86, cela a fonctionné
la source
Je viens de rencontrer ce problème et après toutes les explications sur sa résolution avec l'invite de commande, j'ai trouvé que si vous l'ajoutez directement au projet, vous pouvez simplement inclure la bibliothèque sur chaque page dont elle a besoin
la source
J'ai le même problème avec l'importation de WinSCard.dll dans mon projet. Je traite cela en important directement à partir de dll comme ceci:
Vous pouvez l'ajouter pour séparer le projet, puis ajouter une référence à votre projet principal.
la source
J'ai eu ce problème après le redémarrage de mon PC lors de la création de la solution. Mes deux références ont disparu, j'ai donc dû reconstruire mes deux projets manuellement et ensuite j'ai pu ajouter des références sans erreur.
la source
Vous ne pouvez pas ajouter de référence à une DLL native . Cependant, vous pouvez les inclure dans la solution (clic droit sur la solution, sélectionnez "Ajouter un fichier existant"), mais ils ne seront pas référencés sauf si vous déclarez quelque chose comme
Il existe peut-être une sorte de DLL wrapper , que vous référencez en fait et qui contient les importations DLL.
Parfois, vous pouvez référencer la DLL du wrapper mais ne pouvez toujours pas exécuter votre programme, où une invite d'erreur vous suggère de vous assurer que le fichier existe et que toutes les dépendances sont disponibles.
Ce problème est dû au fait que l'assembly que vous essayez d'ajouter est ciblé et compilé uniquement pour une architecture de processeur x86 ou x64 .
Essayez simplement de changer la plate-forme cible en x86 ou x64 dans Build -> Configuration Manager .
la source
J'avais besoin de changer l'architecture en x86 à partir de x64 dans le gestionnaire de configuration et de copier mon dll 32 bits (langage C - pcProxAPI.dll) dans le nouveau dossier que cela a créé .. Ceci est en plus des étapes décrites par "Sashus" ci-dessous .
C: \ Projects .. \ bin \ x86 \ Debug
la source
J'ai eu le même problème lorsque j'ai essayé d'ajouter une dll que je viens de coder en C ++ à mon nouveau projet C #. Il s'est avéré que j'avais besoin de définir les propriétés du projet C ++ dont ma dll provient:
Configuration Properties\General\Common Language Runtime Support: /clr
Configuration Properties\C/C++\General\Common Language RunTime Support: /clr
Parce que le projet C # dans lequel je voulais utiliser cette dll était également défini comme ça (avait les mêmes propriétés définies sur
/clr
).la source
J'ai fait face à un problème similaire. J'essayais d'ajouter la référence d'une DLL .net 2.0 à un projet .Net 1.1. Quand j'ai essayé d'ajouter une version précédente du .dll qui était conforme à .Net 1.1. cela a fonctionné pour moi.
la source
Pour toute personne cherchant de l'aide à ce sujet, ou rencontrant une FileNotFoundException ou une FirstChanceException, consultez ma réponse ici:
Une exception de première chance de type «System.IO.FileNotFoundException» s'est produite dans mscorlib.ni.dll - Windows Phone
En général, vous devez être absolument certain que vous remplissez toutes les conditions requises pour faire la référence - je sais que c'est la réponse évidente, mais vous oubliez probablement une exigence relativement simple.
la source
J'ai eu cette erreur lors de l'écriture d'un service Windows. J'exécutais Visual Studio en tant qu'administrateur afin que mes commandes de post build installent automatiquement mon service. J'ai remarqué que lorsque j'ai tout fermé et exécuté VS normalement (pas en tant qu'administrateur), cela m'a permis d'ajouter les références très bien sans erreur.
J'espère que cette solution fonctionne pour vous.
la source
Normalement, dans Visual Studio 2015, vous devez créer le projet dll en tant que projet C ++ -> CLR à partir des modèles de Visual Studio, mais vous pouvez l'activer techniquement après le fait:
La propriété critique est appelée
Common Language Runtime Support
set dans la configuration de votre projet. Il se trouve sousConfiguration Properties > General > Common Language Runtime Support
.Lors de cette opération, VS ne mettra probablement pas à jour l'option «Target .NET Framework» (comme il se doit). Vous pouvez l'ajouter manuellement en déchargeant votre projet, en éditant le fichier your_project.xxproj et en ajoutant / mettant à jour la
Target .NET framework Version
balise XML.Pour un exemple, je suggère de créer une nouvelle solution en tant que projet C ++ CLR et d'y examiner le XML, peut-être même de le différencier pour s'assurer qu'il n'y a rien de très important qui sort de l'ordinaire.
la source
Ma réponse est un peu tardive, mais à titre de test rapide, assurez-vous que vous utilisez la dernière version des bibliothèques.
Dans mon cas, après la mise à jour d'une bibliothèque nuget qui faisait référence à une autre bibliothèque à l'origine du problème, le problème a disparu.
la source
Vous pouvez ajouter un fichier .dll manuellement. Par exemple, si vous souhaitez ajouter un fichier dll dans votre application WPF et que vous ne parvenez pas à le référencer dans votre projet
(Obtention d'erreur: une référence à la ".... dll" n'a pas pu être ajoutée. Veuillez vous assurer que le fichier est accessible et qu'il s'agit d'un assemblage ou d'un composant COM valide),
puis COPY ce fichier dll et COLLER dans le PROJET INSTALLATEUR (dans le dossier de l'application).
la source
la source