КакВ файле .csproj, что такое <None Include = "..."> for?
<None Include="C:\foo.bar" />
отличается от
<Content Include="C:\foo.bar" />
?
КакВ файле .csproj, что такое <None Include = "..."> for?
<None Include="C:\foo.bar" />
отличается от
<Content Include="C:\foo.bar" />
?
Статья MSDN о собственности build action объясняет различия.
None - Файл не включен в выходной группы проекта и не компилируются в процессе сборки. Примером может служить текстовый файл, содержащий документацию, такую как файл Readme.
Содержание - Файл не скомпилирован, а включен в группу вывода контента. Например, этот параметр является значением по умолчанию для .htm или другого типа веб-файла.
Спасибо, мне не удалось найти эту ссылку. – Emmett
Одна разница заключается в том, как они публикуются; Элементы «Нет» не включаются в публикацию, элементы «Содержимое» делают; например, в диалоговом окне «Файлы приложений» на вкладке «Опубликовать».
Я не уверен на 100% (я прочитал описание MSDN из сборки действий собственности), но просто скопировать этот ответ от MSDN для StackOverflow не дает ответа на вопрос полностью для меня.
Разница None и Содержание влияет только на веб-проектов. Для проекта командной строки, проекта WinForm или проекта UnitTest (в моем случае) и т. Д. Нет и Содержимое не имеет по-разному поведения.
MSDN: «группа вывода проекта» или «Группа вывода контента» используются только термины, используемые в веб-проекте, не так ли?
Как вы говорите, кажется, что 'None' vs' Content' влияет только на шаг _publish_, а не на шаг _build_. Для шага сборки кажется, что 'CopyToOutputDirectory' может быть установлен на любом из них, и это управляет, если файл копируется на этапе сборки. Также кажется странным, что по умолчанию шаблоны T4 добавляются как элементы «Содержимое», а не «Нет». –
У меня есть проект, который не содержит компилируемых элементов (он хранит html и javascript для тестов модуляции жасмина).
Однажды мое решение (содержащее упомянутый проект) прекратило компиляцию, сказав: «Целевой« Build »не существует в проекте».
Я добавил импорт, чтобы привести компилятор, который отлично работал на моей машине, но не смог с помощью msbuild на сервере сборки.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Затем я изменил линию от
<None Include="SpecRunner.html" />
в
<Content Include="SpecRunner.html" />
и он работал на сервере сборки, а также.
Вам не нужно ни одного файла шаблона проекта, чтобы включить файлы, которые вы определяете в .vstemplate, иначе они будут потеряны при создании процесса преобразования &. Они остаются в папке temp, которую он использует для создания всего, а затем удаляются вскоре после этого.
В моей ситуации, мой файл 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 article (для Visual Studio 2010) дал мне указания, что я искал:
Обратите внимание, что, когда редактор ресурсов добавляет изображение, оно устанавливает Построить Действие к None, потому что файл .resx ссылается на файл . Во время сборки изображение вставляется в файл .resources , созданный из файла .resx. Затем изображение можно легко получить через с помощью строго типизированного класса, автоматически сгенерированного для файла .resx. Следовательно, вы не должны изменять этот параметр на Встраиваемый Ресурс, потому что это будет включать изображение два раза в сборке.
Разрешение: С этим руководством, с помощью текстового редактора, я изменил элементы типа Content
элемента для None
.
Кроме того, для обзора элементов MSBuild см. Это MSDN article.
Моноксид, я думаю, вы ответили на свой вопрос: из любопытства. –
У меня было несколько «Content's get changed to' None's. Я думаю, что это произошло, когда я переименовал файлы с .ascx на .cshtml при конвертации в Razor. Меняя их вручную, я исправил некоторые проблемы с развертыванием, которые у меня были. Рад, что нашел это. – Chris
@MatthewScharley Мне очень жаль, что вы не можете скомпенсировать комментарии, потому что я бы спустил ваш. Почему он не должен редактировать свои файлы .csproj? – Jez