Для чего нужен <None Include="…"> в файле .csproj?

StackOverflow https://stackoverflow.com/questions/1060870

  •  21-08-2019
  •  | 
  •  

Вопрос

Как

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

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

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

?

Это было полезно?

Решение

Статья MSDN о построить действие свойство объясняет различия.

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

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

Другие советы

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

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

Разница Никто и Содержание влияет только на веб-проекты.Для проекта командной строки, проекта 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.Поэтому не следует изменять эту настройку на Встроенный ресурс, потому что это будет включать изображение два раза в сборке.

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

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

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

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

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

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

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

<None Include="SpecRunner.html" />

к

<Content Include="SpecRunner.html" />

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top