2009-06-29 6 views
81

КакВ файле .csproj, что такое <None Include = "..."> for?

<None Include="C:\foo.bar" /> 

отличается от

<Content Include="C:\foo.bar" /> 

?

+28

Моноксид, я думаю, вы ответили на свой вопрос: из любопытства. –

+6

У меня было несколько «Content's get changed to' None's. Я думаю, что это произошло, когда я переименовал файлы с .ascx на .cshtml при конвертации в Razor. Меняя их вручную, я исправил некоторые проблемы с развертыванием, которые у меня были. Рад, что нашел это. – Chris

+7

@MatthewScharley Мне очень жаль, что вы не можете скомпенсировать комментарии, потому что я бы спустил ваш. Почему он не должен редактировать свои файлы .csproj? – Jez

ответ

88

Статья MSDN о собственности build action объясняет различия.

None - Файл не включен в выходной группы проекта и не компилируются в процессе сборки. Примером может служить текстовый файл, содержащий документацию, такую ​​как файл Readme.

Содержание - Файл не скомпилирован, а включен в группу вывода контента. Например, этот параметр является значением по умолчанию для .htm или другого типа веб-файла.

+4

Спасибо, мне не удалось найти эту ссылку. – Emmett

20

Одна разница заключается в том, как они публикуются; Элементы «Нет» не включаются в публикацию, элементы «Содержимое» делают; например, в диалоговом окне «Файлы приложений» на вкладке «Опубликовать».

10

Я не уверен на 100% (я прочитал описание MSDN из сборки действий собственности), но просто скопировать этот ответ от MSDN для StackOverflow не дает ответа на вопрос полностью для меня.

Разница None и Содержание влияет только на веб-проектов. Для проекта командной строки, проекта WinForm или проекта UnitTest (в моем случае) и т. Д. Нет и Содержимое не имеет по-разному поведения.

MSDN: «группа вывода проекта» или «Группа вывода контента» используются только термины, используемые в веб-проекте, не так ли?

+1

Как вы говорите, кажется, что 'None' vs' Content' влияет только на шаг _publish_, а не на шаг _build_. Для шага сборки кажется, что 'CopyToOutputDirectory' может быть установлен на любом из них, и это управляет, если файл копируется на этапе сборки. Также кажется странным, что по умолчанию шаблоны T4 добавляются как элементы «Содержимое», а не «Нет». –

1

У меня есть проект, который не содержит компилируемых элементов (он хранит html и javascript для тестов модуляции жасмина).

Однажды мое решение (содержащее упомянутый проект) прекратило компиляцию, сказав: «Целевой« Build »не существует в проекте».

Я добавил импорт, чтобы привести компилятор, который отлично работал на моей машине, но не смог с помощью msbuild на сервере сборки.

<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" /> 

Затем я изменил линию от

<None Include="SpecRunner.html" /> 

в

<Content Include="SpecRunner.html" /> 

и он работал на сервере сборки, а также.

1

Вам не нужно ни одного файла шаблона проекта, чтобы включить файлы, которые вы определяете в .vstemplate, иначе они будут потеряны при создании процесса преобразования &. Они остаются в папке temp, которую он использует для создания всего, а затем удаляются вскоре после этого.

5

В моей ситуации, мой файл 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.