Я получаю System.IO.FileNotFoundException: The specified module could not be found
при запуске кода С#, который вызывает сборку С++/CLI, которая в свою очередь вызывает чистую C DLL. Это происходит, как только создается экземпляр объекта, который вызывает функции C DL для чистого C.
BackingStore - чистый C. CPPDemoViewModel - это С++/CLI, вызывающий BackingStore, он имеет ссылку на BackingStore.
Я попробовал самый простой случай - добавьте новый проект С# unit test, который просто пытается создать объект, определенный в CPPDemoViewModel. Я добавил ссылку из проекта С# в CPPDemoViewModel.
Проект тестирования на С++/CLI отлично работает с добавленным ref в CPPDemoViewModel, чтобы он мог перемещаться между языками.
Я использую Visual Studio 2008 SP1 с .Net 3.5 SP1. Я основываюсь на Vista x64, но старался удостовериться, что мой целевой объект платформы установлен на x86.
Это похоже на что-то глупое и очевидное, которого я пропускаю, но мне было бы еще глупее тратить время на то, чтобы решить это наедине, так что я здесь смущаюсь!
Это тест для переноса проекта огромного количества унаследованного кода C, который я храню в DLL с помощью ViewModel, реализованного в С++/CLI.
изменить После проверки каталогов я могу подтвердить, что файл BackingStore.dll не был скопирован.
У меня есть стандартные уникальные папки проектов, созданные с типичным многопроектным решением.
WPFViewModelInCPP BackingStore CPPViewModel CPPViewModelTestInCS bin Debug Debug
Отладчик более высокого уровня, похоже, является общей папкой, используемой проектами 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, если на него ссылаются. Я не могу добавить ссылку из проекта С# в чистую DLL C - она просто говорит, что ссылка на резервное хранилище не может быть добавлена.
Я не уверен, есть ли у меня только одна проблема.
Я могу использовать старомодный шаг копирования, чтобы скопировать BackingStore.dll в любые каталоги проектов С#, хотя я надеялся, что новая модель .net этого не потребует.
DependencyWalker сообщает мне, что отсутствующий файл - это файл GPSVC.dll, который был указан, указывает проблемы безопасности. Я подозреваю, что это красная селедка.
edit2 Если ручная копия BackingStore.dll находится рядом с исполняемым файлом, графический интерфейс теперь работает нормально. У проекта тестирования С# все еще есть проблемы, которые, как я подозреваю, обусловлены средой выполнения тестового проекта, но я могу жить без этого.