web-dev-qa-db-fra.com

Comment résoudre le problème "Assurez-vous que le fichier est accessible et qu'il s'agit d'un composant Assembly ou COM valide"?

Je construis un projet avec OpenCV en C #. Il nécessite un fichier DLL appelé cvextern.dll. mais, lors de l'ajout de ce fichier comme référence, ce message apparaît: -

une référence "cvextern.dll" ne peut pas être ajoutée. Assurez-vous que le fichier est accessible et qu'il s'agit d'un composant Assembly ou COM valide.

Je suis fatigué de chercher, j'ai passé les 2 derniers jours à chercher une solution à ce problème 

43
Omar Osama

le fichier est un fichier natif DLL, ce qui signifie que vous ne pouvez pas l'ajouter à un projet .NET via Ajouter une référence ... vous pouvez l'utiliser via DllImport (voir http://msdn.Microsoft.com/en -us/library/system.runtime.interopservices.dll importattribute.aspx )

23
Yahia

Dans mon cas, je devais enregistrer le fichier .dll.

Pour ce faire, ouvrez cmd.exe (la console) avec les droits d'administrateur et tapez:

regsvr32 "foo.dll"
22
user2248818

Assurez-vous que les dll requises sont exportées (ou copiées manuellement) dans le dossier bin lors de la création de votre application.

4
billy

J'ai eu le même programme, j'espère que cela pourrait aider.

Si vous utilisez Windows 7, ouvrez Invite de commande -> Exécuter en tant qu’administrateur. enregistrez votre <...>. dll. 

Pourquoi exécuter en tant qu'administrateur, vous pouvez enregistrer votre <...> .dll à l'aide de l'exécution au démarrage de Windows, mais votre dll ne s'exécute qu'en tant qu'utilisateur, même votre compte est administrateur.

Maintenant, vous pouvez ajouter votre <...> .dll au projet-> Ajouter une référence-> Parcourir

Merci

3
simoncsunas

'It' nécessite un fichier dll appelé cvextern.dll. 'It' peut être votre propre fichier cs ou une autre dll tierce que vous utilisez dans votre projet.

Pour appeler des dll natives dans votre propre fichier cs, copiez la dll dans le répertoire racine\lib de votre projet et ajoutez-la en tant qu'élément existant. (Ajouter un élément existant) et utilisez Dllimport avec l’emplacement correct.

Pour les tiers, copiez la bibliothèque native dans le dossier où se trouve la bibliothèque tierce et ajoutez-la en tant qu'élément existant.

Après la construction, assurez-vous que les dll requises apparaissent dans le dossier Build. Dans certains cas, il peut ne pas apparaître ou être remplacé dans le dossier Build. Supprimez le dossier de génération manuellement et générez à nouveau.

1
Jerin

Regardez ici pour la réponse de TheMattster. Je l'ai mis en œuvre et cela a fonctionné à merveille. En résumé, sa solution suggère d’ajouter la dll COM en tant que ressource au projet (elle est donc compilée dans la dll du projet) et lors de la première exécution, écrivez-la dans un fichier endroit).

Ce qui suit est tiré de sa réponse.

Étape 1) Ajoutez le DLL en tant que ressource (ci-dessous sous le nom "Resources.DllFile"). Pour ce faire, ouvrez les propriétés du projet, sélectionnez l’onglet Ressources, sélectionnez "Ajouter un fichier existant" et ajoutez le fichier DLL en tant que ressource.

Étape 2) Ajoutez le nom du DLL en tant que ressource de chaîne (ci-dessous sous le nom "Resources.DllName").

Étape 3) Ajoutez ce code à votre formulaire principal: 

if (!File.Exists(Properties.Resources.DllName))
{
    var outStream = new StreamWriter(Properties.Resources.DllName, false);
    var binStream = new BinaryWriter(outStream.BaseStream);
    binStream.Write(Properties.Resources.DllFile);
    binStream.Close();
}

Mon problème était que non seulement je devais utiliser la dll COM dans mon projet, je devais aussi le déployer avec mon application en utilisant ClickOnce, et sans pouvoir y ajouter une référence dans mon projet, la solution ci-dessus était pratiquement la seule qui travaillé.

1
gneri