Ссылка на неуправляемую сборку - PullRequest
9 голосов
/ 09 января 2012

Я пытаюсь сослаться на управляемую DLL в моем проекте .NET, не копируя ее в выходной каталог.Поэтому, когда моя программа запускается, она запускает DLL из того места, где она установлена ​​- где бы она ни находилась.Проблема заключается в том, что эта управляемая DLL вызывает неуправляемые библиотеки DLL.Когда я пытаюсь сослаться на управляемую DLL, она выдает FileNotFound Exception - Could not load file or assembly 'CharacterGen' or one of its dependencies. The system cannot find file specified.Когда я устанавливаю вывод в тот же каталог, что и DLL, на которую я ссылаюсь, все работает нормально.Обычным решением будет также ссылаться на библиотеки DLL, которые вызываются из другой сборки.Однако я не могу ссылаться на неуправляемые сборки из моей управляемой программы.

Есть ли способ ссылки на управляемую DLL, которая вызывает неуправляемые библиотеки DLL?

Ответы [ 2 ]

16 голосов
/ 09 января 2012

Если вы спрашиваете, как заставить Visual Studio скопировать неуправляемую DLL в выходной каталог, вы можете сделать это:

  1. Добавьте неуправляемую dll как файл или связанный файл в ваш проект. (щелкните правой кнопкой мыши проект -> добавить -> существующий файл, затем либо Добавить, либо Добавить как ссылку).
  2. Выберите файл в обозревателе решений. В окне свойств установите действие сборки, чтобы копировать всегда.
1 голос
/ 11 июня 2016

Если в вашем решении есть куча неуправляемых библиотек C ++, которые вы создаете, и одна или две управляемые сборки C #, и все они должны находиться в одной папке, я обнаружил, что настройка всех проектов для использованиятот же каталог вывода, чтобы быть самым простым в управлении решением.- Таким образом, если проекты переименовываются позже и т. Д., Все они все равно оказываются в нужном месте, и если вы добавляете новый проект позже, вам не нужно выяснять, в какие dll нужно добавить, выпросто нужно установить для OutputPath то же самое, что и для других ваших проектов.

Для этого я установил для свойства OutputPath (для всех конфигураций и платформ для каждого проекта) значение $(SolutionDir)\bin\$(Configuration).

Как правило, я не включаю $(Platform) в путь, потому что для неуправляемых проектов он называется Win32, а для управляемых - x86 - но если вам действительно нужна сегрегация платформы, вы можетевыполните некоторую условную логику в файлах .csproj, чтобы создать новое свойство с требуемым значением.

...