Разница между контентом сборки и "Копировать в выходной каталог" в Visual Studio
В моем проекте в Visual Studio у меня есть файлы, которые я хочу включить в вывод, но не скомпилированные или встроенные.
Я знаю, что есть два способа сделать это.
- Настройка действия сборки для файла в "Содержимое"
- Установка "Копировать в каталог вывода" на "Копировать всегда" или "Копировать, если новый"
Может кто-нибудь сказать мне, в чем разница, и какой сценарий подходит для каждого из вариантов?
Ответы
Ответ 1
При настройке Build Action
на Content
файл не будет скомпилирован и будет помещен в группу вывода содержимого.
Будет ли файл получать копии или нет, зависит от параметра Copy to Output Directory
в этой точке.
Конечно, если вы установили Copy Always
в файл, он может быть скомпилирован и скопирован.
Смотрите Свойства файла в MSDN:
Содержимое. Файл не скомпилирован, но включен в группу вывода контента. Например, этот параметр является значением по умолчанию для .htm или другого типа веб файла.
Ответ 2
Действие сборки содержимого имеет видимый эффект в проектах WPF (возможно, ASP тоже).
Он добавляет
[assembly: System.Windows.Resources.AssemblyAssociatedContentFileAttribute("filename")]
до WpfApplication1_Content.g.cs
. Читайте о AssemblyAssociatedContentFileAttribute
.
В WinForms и консольном приложении (что OP может использовать) он этого не делает, поэтому при создании нет никакого значения для действия None.
В этом комментарии я также нашел заметку о влиянии на развертывание:
Также обратите внимание, что Содержимое будет включено при развертывании с одним щелчком мыши, но None даже не будет выбрано "copy if newer".
Возможно, это работает даже для консольных и WinForms-приложений (я не пробовал).
Ответ 3
Копировать Всегда также инициирует перестройку этого проекта в решении, даже если код не изменился.