Я получаю System.IO.FileNotFoundException: The specified module could not be found
при запуске кода C #, который вызывает сборку C ++ / CLI, которая, в свою очередь, вызывает чистую C DLL. Это происходит, как только создается экземпляр объекта, который вызывает чистые функции C DLL.
BackingStore - чистый C.
CPPDemoViewModel - это C ++ / CLI, вызывающий BackingStore, в котором есть ссылка на BackingStore.
Я попробовал самый простой возможный случай - добавить новый проект модульного тестирования C #, который просто пытается создать объект, определенный в CPPDemoViewModel. Я добавил ссылку из проекта C # в CPPDemoViewModel.
Тестовый проект C ++ / CLI отлично работает, просто добавив ссылку на CPPDemoViewModel, так что это что-то вроде перехода между языками.
Я использую Visual Studio 2008 SP1 с .Net 3.5 SP1. Я работаю на Vista x64, но старался, чтобы моя цель Platform была установлена на 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 set, которое, как я полагаю, отвечает за копирование своей DLL, если на нее ссылаются. Я не могу добавить ссылку из проекта C # в чистую DLL-библиотеку C - она просто говорит Невозможно добавить ссылку на резервное хранилище.
Я не уверен, есть ли у меня одна или две проблемы.
Я могу использовать старомодный шаг сборки для копирования, чтобы скопировать BackingStore.dll в каталоги любого проекта C #, хотя я надеялся, что новая модель .net этого не требует.
DependencyWalker сообщает мне, что отсутствующим файлом является файл GPSVC.dll, который, как было предложено , указывает на проблемы с настройками безопасности. Я подозреваю, что это красная сельдь.
edit2
С ручной копией BackingStore.dll, которая находится рядом с исполняемым файлом, графический интерфейс теперь работает нормально. Тестовый проект C # по-прежнему имеет проблемы, которые, как я подозреваю, вызваны средой выполнения тестового проекта, но сейчас я могу жить без нее.