Для чего нужен файл <None Include = "..."> в файле .csproj? - PullRequest
118 голосов
/ 30 июня 2009

Как это

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

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

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

Ответы [ 7 ]

125 голосов
/ 30 июня 2009

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

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

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

29 голосов
/ 30 июня 2009

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

12 голосов
/ 18 сентября 2011

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

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

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

6 голосов
/ 28 октября 2015

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

Пока мой проект строился нормально, это заставляло меня задуматься, почему в моем ItemGroup было сочетание элементов типа Content и None. Эта статья MSDN (для Visual Studio 2010) дала мне руководство, которое я искал:

Обратите внимание, что когда редактор ресурсов добавляет изображение, он устанавливает Build Действие до Нет , поскольку файл .resx ссылается на изображение файл. Во время сборки изображение помещается в файл .resources. созданный из файла .resx. Изображение может быть легко доступно с помощью строго типизированного класса, автоматически сгенерированного для файла .resx. Поэтому не следует изменять этот параметр на Embedded Ресурс , потому что при этом изображение будет дважды сборка.

Разрешение: С помощью этого руководства, используя текстовый редактор, я изменил элементы типа элемента Content на None.

Кроме того, обзор элементов MSBuild см. В этой статье MSDN .

3 голосов
/ 25 апреля 2012

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

Однажды мое решение (которое содержало указанный проект) перестало компилировать, говоря, что "цель" Построить "не существует в проекте".

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

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

Затем я изменил строку с

<None Include="SpecRunner.html" />

до

<Content Include="SpecRunner.html" />

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

1 голос
/ 17 февраля 2013

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

0 голосов
/ 24 декабря 2018

В моем случае .Pubxml является одним из этих файлов в списке Нет . Он не предназначен для построения решения или как статический файл для веб-проекта. Но для публикации сайта в Azure конфигурации присутствуют в этом.

Согласно статье Microsoft, это основные типы, которые мы видим среди .csproj тегов файла:

Нет - файл не входит в группу вывода проекта и не является скомпилирован в процессе сборки. Примером является текстовый файл, который содержит документация, такая как файл Readme.

Компиляция - файл компилируется в выходные данные сборки. Этот параметр используется для файлов кода.

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

Embedded Resource - этот файл внедрен в основную сборку проекта. вывод в виде DLL или исполняемого файла. Обычно используется для ресурса файлы.

...