C# C++/CLI C DLL Système.IO.FileNotFoundException

Je suis System.IO.FileNotFoundException: The specified module could not be found lors de l'exécution de code C# qui appelle un C++/CLI assemblée qui appelle à son tour une pure C DLL. Il se produit dès qu'un objet est instancié qui appelle la pure C fonctions de la DLL.

BackingStore est de la pure C.
CPPDemoViewModel est le C++/CLI appel BackingStore il a une référence à BackingStore.

J'ai essayé le plus simple possible cas - ajouter un nouveau C# test de l'unité projet qui tente de créer un objet défini dans CPPDemoViewModel . J'ai ajouté une référence du projet C# pour CPPDemoViewModel .

C++/CLI projet de test fonctionne très bien avec juste l'ajout ref à CPPDemoViewModel c'est donc quelque chose au sujet de passer entre les langues.

Je suis à l'aide de Visual Studio 2008 SP1 .Net 3.5 SP1. Je suis en train de construire sur Vista x64, mais ont pris soin de m'assurer que ma Plate-forme cible est définie sur x86.

Cela se sent comme quelque chose de stupide, et je suis évidemment absent, mais il serait encore plus stupide de me faire perdre du temps à essayer de le résoudre en privé donc je suis ici à être ridicule!

Ceci est un test pour un projet de portage d'une énorme quantité de l'héritage de code C qui je vais garder dans une DLL avec un ViewModel implémenté en C++/CLI.

modifier
Après vérification des répertoires, je peux confirmer que le BackingStore.dll n'a pas été copié.

J'ai le standard unique des dossiers de projet créé avec un typique multi-projet de solution.

WPFViewModelInCPP 
BackingStore 
CPPViewModel 
CPPViewModelTestInCS 
bin 
Debug 
Debug 

Au plus haut niveau de Debug semble être un bon dossier utilisé par le C et le C++/CLI projets, à ma grande surprise.

WPFViewModelInCPP\Debug contient BackingStore.dll, CPPDemoViewModel.dll, CPPViewModelTest.dll et de leurs associés .ilk et .fichiers pdb

WPFViewModelInCPP\CPPViewModelTestInCS\bin\Debug contient CPPDemoViewModel et CPPViewModelTestInCS .dll et .fichiers pdb mais pas BackingStore. Toutefois, la copie manuelle BackingStore dans ce répertoire n'a pas corrigé l'erreur.

CPPDemoViewModel a la propriété Copie Locale ensemble ce qui je suppose est responsable de copier DLL lorsque s'est référencé. Je ne peux pas ajouter une référence à partir d'un projet C# pour un pur DLL C - il dit seulement Une Référence à la mémoire de Sauvegarde n'a pas pu être ajouté.

Je ne suis pas sûr si j'ai juste un problème ou deux.

Je peux utiliser une ancienne copie étape de génération de copier le BackingStore.dll en tout C# répertoires du projet, bien que je l'avais espéré que le nouveau .net modèle n'a pas exigé que.

DependencyWalker me dit que le fichier est manquant GPSVC.dll qui a été suggéré indique le paramètre de sécurité de questions. Je suppose que c'est un leurre.

edit2
Avec une copie manuelle de BackingStore.dll à côté de l'exécutable, l'interface graphique fonctionne maintenant très bien. Le C# du Projet de Test a encore des problèmes qui je pense est en raison de l'environnement d'exécution d'un projet de test, mais je peux vivre sans, pour l'instant.

OriginalL'auteur Andy Dent | 2009-03-15