Я получаю System.IO.FileNotFoundException: The specified module could not be found
при запуске C# код, который вызывает сборку C++/CLI, который в свою очередь, вызывает чистый C DLL. Это происходит, как только создается экземпляр объекта, который вызывает функции чистого C DLL.C# для C++/CLI для C DLL System.IO.FileNotFoundException
BackingStore is pure C. CPPDemoViewModel - это C++/CLI, вызывающий BackingStore, он имеет ссылку на BackingStore.
Я пробовал самый простой случай - добавьте новый тестовый проект на C#, который просто пытается создать объект, определенный в CPPDemoViewModel. Я добавил ссылку из проекта C# в CPPDemoViewModel.
Проект тестирования на C++/CLI отлично работает с добавленным ref в CPPDemoViewModel, поэтому это что-то вроде перехода между языками.
Я использую Visual Studio 2008 SP1 с .Net 3.5 SP1. Я основываюсь на Vista x64, но старался убедиться, что для моей платформы задано значение x86.
Это похоже на что-то глупое и очевидное, что мне не хватает, но мне было бы еще глупее тратить время на то, чтобы решить это наедине, так что я здесь смущаю себя!
Это тест для проекта, переносящего огромное количество унаследованного кода C, который я храню в DLL, с ViewModel, реализованным в C++/CLI.
Редактировать После проверки каталогов я могу подтвердить, что BackingStore.dll не был скопирован.
У меня есть стандартные уникальные папки проектов, созданные с типичным многопроектным решением.
WPFViewModelInCPP BackingStore CPPViewModel CPPViewModelTestInCS bin Debug Debug
Чем выше уровень отладки, как представляется, общая папка используется проектами C и C++/CLI, к моему удивлению.
WPFViewModelInCPP \ Debug содержит BackingStore.dll, CPPDemoViewModel.dll, CPPViewModelTest.dll и их ассоциированных .ilk и .pdb файлы
WPFViewModelInCPP \ CPPViewModelTestInCS \ Bin \ Debug содержит CPPDemoViewModel и CPPViewModelTestInCS .dll и PDB-файлы, но не BackingStore. Однако вручную копирование BackingStore в этот каталог не исправило ошибку.
CPPDemoViewModel имеет свойство Copy Local набор, который я предполагаю, отвечает за копирование его DLL, когда, если есть ссылка. Я не могу добавить ссылку из проекта C# в чистую C DLL - он просто говорит Ссылка на хранилище не может быть добавлена.
Я не уверен, что у меня есть только одна проблема.
Я могу использовать старомодный шаг копирования, чтобы скопировать файл BackingStore.dll в любые каталоги проекта C#, хотя я надеялся, что новая модель .net этого не потребует.
DependencyWalker сообщает мне, что отсутствующим файлом является файл GPSVC.dll, который has been suggested указывает на проблемы с настройкой безопасности. Я подозреваю, что это красная селедка.
edit2 С ручной копии BackingStore.dll быть рядом с исполняемым файлом, графический интерфейс теперь работает отлично. У тестируемого проекта C# все еще есть проблемы, которые, как я подозреваю, обусловлены средой выполнения тестового проекта, но я могу жить без этого на данный момент.
Да, я знаю, что дерзко отметить свой собственный ответ, но никто не приблизился к реальному ответу на те тесты, на которые ушел хороший час рытья. Я все еще ошеломлен, мне нужно использовать такую старомодную технику для копирования DLL! –
Энди, вы все равно должны проверить, что я поднял точку, у меня такое ощущение, что вам повезло с порядком/временем инициализации, и в будущем вам может не повезти без твердой хватки на этом. – RandomNickName42