Добавьте Ссылку от Приложения C# до DLL, скомпилированного без сброса/?

Я использую Visual Studio 2008 для создания Решения с двумя Проектами: Консольное Приложение C# и DLL C++. Я хочу, чтобы приложение вызвало функцию от dll, использующего P/Invoke. Поэтому я пытаюсь добавить dll как Ссылку на приложение C#. Но когда я пробую команду Add Reference, Visual Studio не позволит мне сделать это, если я не установил свойство сброса / на dll (в соответствии с Конфигурацией Properties:General). Теперь, я думал, что P/Invoke мог обработать простой win32 dlls. Действительно, если я создаю свой dll без сброса / и просто копирую его вручную в мусорное ведро/Отладку, затем прекрасное выполнение приложения. Итак, почему сброс / требуется добавить dll как ссылку? И если VS не позволит мне добавить его, есть ли некоторое (чистое) обходное решение так, чтобы мое приложение нашло dll?

Я вижу, что у кого-то была подобная проблема здесь (хотя со сторонним dll): Не мог добавить Ссылку DLL на VS 2008 ответ, который он получил, должен был создать обертку. Но это не действительно необходимо, так как приложение может использовать dll очень хорошо; это - просто Добавить Ссылочный шаг, который не работает. И кроме того, разве обертка не кодирует, нуждаются в ссылке на dll, повышая ту же проблему как прежде? Я действительно хотел бы ответ, который не включает запись обертки вообще.

6
задан Community 23 May 2017 в 12:26
поделиться

3 ответа

Почему бы просто не добавить шаг после сборки, чтобы скопировать неуправляемую библиотеку DLL в каталог проекта? Вам не нужна "ссылка", чтобы иметь возможность ссылаться на неуправляемую DLL, и похоже, что единственная проблема, с которой вы сталкиваетесь - это то, что файл не копируется автоматически в путь поиска.

7
ответ дан 8 December 2019 в 18:36
поделиться

При использовании PinVoke на C ++ DLL не нужно добавлять ссылку. Ссылки необходимы только тогда, когда вы звоните управляемым кодом в другой DLL. Просто поместите C ++ DLL в тот же каталог и добавьте его имя в атрибут DLLIMPORT

6
ответ дан 8 December 2019 в 18:36
поделиться

Теоретически вы можете добавить C ++ - DLL в качестве связанного ресурса к вашему C # -DLL. Это сделало бы .NET копировать вашу C ++ - DLL, где это копирует C # -DLL даже в GAC. Теоретически означает, что есть некоторые недостатки:

  • Вы могли бы поручить компилятору C # (CSC.exe) через параметры командной строки, чтобы добавить связанный ресурс, но я никогда не нашел способ сделать это через файл .csproj или даже Visual Studio
  • Если C # -DLL содержит элементы управления пользователем WinForms, и вы хотите использовать его в дизайнере, он не будет работать, потому что WinForms-Designer копирует C # -DLL в временное место, где он загружает его, но он игнорирует связанный ресурс.
  • Я не знаю, работает ли он, если вы поместите свой C # -DLL в GAC (да C ++ - DLL также попадет в ресурс, но я не знаю, найден ли он при запуске вашего C # - DLL!)

Итак, если ни одно из вышеперечисленного не является ними для вас, вы можете позвонить в CSC.exe следующее:

csc.exe ... /linkresource:cpp.dll

Надеюсь, это может помочь!

0
ответ дан 8 December 2019 в 18:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: