Как
<None Include="C:\foo.bar" />
отличается от
<Content Include="C:\foo.bar" />
?
Как
<None Include="C:\foo.bar" />
отличается от
<Content Include="C:\foo.bar" />
?
В статье MSDN, посвященной build action, объясняются различия.
Нет. Файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером может служить текстовый файл, содержащий документацию, такую как файл Readme.
Содержимое - Файл не скомпилирован, но включен в группу вывода контента. Например, этот параметр является значением по умолчанию для .htm или другого типа веб файла.
Одно из различий заключается в том, как они публикуются; Элементы "Нет" не включаются в публикацию, элементы "Содержимое" делают; например, в диалоговом окне "Файлы приложений" на вкладке "Опубликовать".
Я не уверен на 100% (я прочитал описание MSDN свойства Build Action), но просто копирование этого ответа из MSDN в StackOverflow не полностью отвечает на вопрос.
Разница Нет и Контент влияет только на веб-проекты. Для проекта командной строки проект WinForm или проект UnitTest (в моем случае) и т.д. Нет и Контент не имеют другого поведения.
MSDN: "группа вывода проекта" или "Группа вывода контента" используются только термины, используемые в веб-проекте, правильно?
В моей ситуации файл MSBuild имел ItemGroup
для ресурсов изображения, которые выглядели следующим образом:
<ItemGroup>
<Content Include="Resources\image001.png" />
<Content Include="Resources\image002.png" />
<Content Include="Resources\image003.png" />
<Content Include="Resources\image004.png" />
<None Include="Resources\image005.png" />
<None Include="Resources\image006.png" />
<None Include="Resources\image007.png" />
</ItemGroup>
В то время как мой проект строился хорошо, это заставило меня задаться вопросом, почему у меня было сочетание элементов элемента Content
и None
в моем ItemGroup
. Эта статья статьи MSDN (для Visual Studio 2010) дала мне руководство, которое я искал:
Обратите внимание, что когда редактор ресурсов добавляет изображение, он устанавливает Сборка Действие до Нет, потому что файл .resx ссылается на изображение файл. Во время сборки изображение вставляется в файл .resources созданный из файла .resx. Изображение можно легко получить доступ с помощью сильно типизированного класса, автоматически сгенерированного для файла .resx. Поэтому вы не должны изменять этот параметр на Embedded Ресурс, поскольку это будет включать изображение два раза в сборка.
Разрешение: С помощью этого руководства, используя текстовый редактор, я изменил элементы типа Content
на None
.
У меня есть проект, который не содержит компилируемых элементов (он хранит html и javascript для модульных тестов жасмина).
Однажды мое решение (содержащее упомянутый проект) прекратило компиляцию: "Целевая" Build "не существует в проекте".
Я добавил импорт, чтобы запустить компилятор, который отлично работал на моей машине, но не смог с помощью msbuild на сервере сборки.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Затем я изменил строку из
<None Include="SpecRunner.html" />
к
<Content Include="SpecRunner.html" />
и он также работал на сервере сборки.
Вам нужно None в файле проекта шаблона, чтобы включить файлы, которые вы определяете в .vstemplate, иначе они будут потеряны в процессе создания и перевода. Они остаются в папке temp, которую он использует для создания всего, а затем удаляются вскоре после этого.