Я вызываю не-.NET dll из своего проекта с помощью P / Invoke, что означает, что .dll всегда должен присутствовать в каталоге .exe.
Есть ли способ сообщить Visual Studio об этой зависимости, чтобы она автоматически копировала .dll в выходной каталог при компиляции и автоматически включала .dll в установку? Или мне придется делать это вручную?





Вы можете просто добавить .DLL в свой проект.
Выберите панель Properties для этого файла и установите Build Action на Content и Copy to Output Directory на Copy if newer.
Да, и именно поэтому я предложил это в своем ответе.
> Именно поэтому я и предложил это в своем ответе И почему я проголосовал за ваш ответ :)
Вы можете скопировать / связать этот файл (ы) с проектом, и в окнах свойств установите «Действие сборки» на «Нет» и «Копировать в выходной каталог» на «Копировать, если новее» или «Копировать всегда».
Или вы можете использовать «События перед сборкой» и «События после сборки», где вы можете указать любые пакетные сценарии.
Я предпочитаю второй вариант, потому что он более гибкий, чем первый.
Также вы можете изменить файл MSBuild и добавить задачу для копирования файла (ов).
Спасибо, первый вариант - это то, что я делал - подумал, есть ли лучший способ
Я думаю, что одна проблема с простым добавлением .DLL в проект заключается в том, что вам могут потребоваться разные версии DLL для отладки и выпуска сборок. Вы могли подумать, что можете добавить в файл как отладочную, так и выпускную версии DLL и в зависимости от конфигурации исключить несоответствующую, но я не смог найти способ сделать это. Я использую Visual Studio 2010. Я уверен, что раньше это работало с VS6.
Вы можете вручную отредактировать файл .csproj, чтобы добавить условие в узел содержимого библиотеки DLL: <Content Include = "MyDLL.Debug.dll" Condition = "'$ (Configuration) | $ (Platform)' == 'Debug | AnyCPU' "/> <Content Include =" MyDLL.Release.dll "Condition =" '$ (Configuration) | $ (Platform)' == 'Release | AnyCPU' "/> В качестве альтернативы вы можете использовать шаг перед сборкой для копирования либо MyDLL.Debug.dll, либо MyDLL.Release.dll в MyDLL.dll в зависимости от текущей конфигурации. (Я думаю, вы сможете сделать это на странице свойств проекта в VS, переключившись с Debug на Release)
Build Action = "Content" лучше, чем Build Action = "None", предложенное в другом ответе. Это потому, что вы можете легко включить файлы «Content» в проект установки.