VS2010 Как включить файлы в проект, скопировать их для автоматического создания выходного каталога во время сборки или публикации

Задача состоит в том, чтобы сформировать проект Visual Studio 2010, чтобы во время любой сборки или публикации некоторая утилита foo.exe была скопирована в каталог вывода (bin).

Раньше я выполнил задачу PostBuildEvent в .csproj(файл MSBuild):

<PropertyGroup>
  <PostBuildEvent>
    Copy "$(SolutionDir)Tools\foo.exe" "$(ProjectDir)$(OutDir)foo.exe"
  </PostBuildEvent>
</PropertyGroup>

Но это не универсально. Во время публикации (Visual Studio 2010) foo.exe появляется в каталоге bin, но не копируется для вывода каталога публикации. Возможно, я делаю все совершенно неправильно, и есть стандартный механизм включения файлов в проекты, которые будут позже, во время сборки или публикации, скопированы в bin?

Ответ 1

Существует и не зависит от событий пост-сборки.

Добавьте файл в свой проект, затем в свойствах файл выберите в разделе "Копировать в выходной каталог" либо "Копировать всегда", либо "Копировать, если новый".

См. MSDN.

Ответ 2

Мне нужно только нажать файлы во время сборки, поэтому я просто добавил запись в командной строке Post-build Event следующим образом:

Copy /Y "$(SolutionDir)Third Party\SomeLibrary\*" "$(TargetDir)"

Вы можете установить это, щелкнув правой кнопкой мыши свой проект в обозревателе решений, затем Properties > Build Events

Ответ 3

В обозревателе решений выберите файлы, которые вы хотите скопировать в выходной каталог, и назначьте два свойства: - Создать действие = Содержимое - Копировать в каталог вывода = Копировать всегда

Это сделает трюк.

Ответ 4

  • Добавьте файл в свой проект.
  • Перейдите в Свойства этого файла.
  • Установите "Build Action" в Embedded Resource.
  • Установите "Копировать в каталог вывода" для копирования всегда.

Ответ 5

В моем случае установка Copy to Output Directory в Copy Always и Build не выполняла трюк, в то время как Rebuild сделал.

Надеюсь, это поможет кому-то!

Ответ 6

Попробуйте добавить ссылку на отсутствующую dll из вашего сервиса/веб-проекта напрямую. Добавление ссылок на другой проект не сработало для меня.

Мне приходилось делать это только при публикации моего веб-приложения, потому что оно не копировало все необходимые DLL.

Ответ 7

Именно поэтому мои соратники с неузнаваемостью с нейронически могут столкнуться с этим здесь, я предположил, что для веб-проектов, если связанный файл был внешним файлом .config, то "выходной каталог" будет тем же самым каталогом, что и web.config живет, т.е. ваш веб-проект. В ретроспективе совершенно неудивительно, что он копирует связанный файл в папку root/bin.

Итак, если он содержит файл appSettings, ваш открытый тег web.config будет

<appSettings file=".\bin\includedAppSettingsFile.config">

Duh.