Для чего нужен <None Include="…"> в файле .csproj?
Вопрос
Как
<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 или исполняемого файла.Обычно используется для файлов ресурсов.