У меня есть решение с C #, C ++ & C ++ / CLI проекты. Чтобы быть более конкретным: это ядро C ++ (~ 5 неуправляемых dll), оболочка ядра C ++ / CLI и сборки C # с логикой специфического проекта.
Некоторое время назад я понял, что конструктор форм VS 2008 (WinForms) иногда не может загрузить сборку оболочки ядра. После нескольких часов, проведенных с отладчиком VS и Procmon, я обнаружил, что VS не может загрузить сборку, потому что он не может разрешать неуправляемые библиотеки, от которых зависит оболочка. VS выполняет поиск в каждой системной папке и папке из переменной среды PATH, но не в папке, где расположена сборка оболочки.
Кроме того, у меня есть 2 формы в одной сборке, одна унаследована от другой: VS конструктор форм прекрасно загружает родительскую форму и не может загрузить унаследованную форму.
Итак, вот мой вопрос: кто-нибудь знает причину такого поведения?
Постскриптум Я использовал обходной путь: добавил папку с двоичными файлами проекта в переменную PATH, но я все еще хочу знать причину.
Вы пытались поместить двоичные файлы в папку исполняемых файлов? Потому что я уверен, что .NET ищет только известные пути (поскольку путь хранится в %ДОРОЖКА% ) и локальная папка исполняемого файла.
Я не знаю точную причину этого, но я думаю, что это потому, что DLL не знает путь, откуда она была загружена (управляемые DLL делают!), И ищет только текущий каталог и другие известные пути.
Но для этого есть обходной путь: вы можете создать исполняемый файл для Visual-Studio и выполнить одно из следующих действий:
SetDllDirectory
SetDllDirectory-сниппета:
[DllImport("kernel32.dll", SetLastError = true)]
public static extern Boolean SetDllDirectory(String pathName);
Других решений пока нет …