Как
<None Include="C:\foo.bar" />
отличный от
<Content Include="C:\foo.bar" />
?
Ответы:
Статья MSDN о свойстве действия сборки объясняет различия.
Нет - файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером является текстовый файл, содержащий документацию, например файл Readme.
Содержимое - файл не компилируется, но включается в группу вывода содержимого. Например, этот параметр является значением по умолчанию для файла .htm или другого типа веб-файла.
Одно отличие состоит в том, как они публикуются; «Нет» элементы не включаются в публикацию, в отличие от элементов «Содержимое»; например, в диалоговом окне «Файлы приложения» на вкладке «Опубликовать».
CopyToOutputDirectory
установленным для true
него набором, он будет опубликован вdotnet publish
Я не уверен на 100% (я прочитал описание свойства Build Action в MSDN ), но простое копирование этого ответа из MSDN в StackOverflow не дает мне полного ответа на этот вопрос.
Разница между None и Content влияет только на веб-проекты. Для проекта командной строки, проекта WinForm или проекта UnitTest (в моем случае) и т. Д. None и Content не имеют разного поведения.
MSDN: «группа вывода проекта» или «группа вывода содержимого» - только термины, используемые в веб-проекте, верно?
None
vs Content
действует только на этапе публикации, а не на этапе сборки . Кажется, что шаг сборки CopyToOutputDirectory
может быть установлен на любом, и это контролирует, копируется ли файл на этапе сборки. Также кажется странным, что по умолчанию шаблоны T4 добавляются как Content
элементы, а не None
элементы.
В моей ситуации мой файл 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" />
и он работал и на сервере сборки.
Вам не нужно None в файле проекта шаблона, чтобы включать файлы, которые вы определяете в .vstemplate, иначе они будут потеряны в процессе создания и перевода. Они остаются во временной папке, которую он использует для создания всего, а затем удаляются вскоре после этого.
В моем случае .Pubxml - один из тех файлов в списке None . Он не предназначен для создания решения или как статический файл для веб-проекта. Но для публикации сайта в Azure конфигурации в нем присутствуют.
Согласно статье Microsoft, это основные типы, которые мы видим среди тегов файлов .csproj :
Нет - файл не входит в группу вывода проекта и не компилируется в процессе сборки. Примером является текстовый файл, содержащий документацию, например файл Readme.
Компилировать - файл компилируется в вывод сборки. Этот параметр используется для файлов кода.
Содержимое - файл не компилируется, но включается в группу вывода содержимого. Например, этот параметр является значением по умолчанию для файла .htm или другого типа веб-файла.
Встроенный ресурс - этот файл встроен в основной вывод сборки проекта как DLL или исполняемый файл. Обычно он используется для файлов ресурсов.
Файлы содержимого не включаются в сборку, но включаются в публикацию.
Никакие файлы не включаются в сборку или публикацию, если они не настроены таким образом вами. Например, если для параметра «Копировать в выходной каталог» установлено значение «Всегда» или «Новее», они будут включены как в сборку, так и в публикацию.
Content
поменял несколько s наNone
s. Думаю, это произошло, когда я переименовал файлы из .ascx в .cshtml при преобразовании в Razor. Их изменение вручную устранило некоторые проблемы с развертыванием, которые у меня были. Рад, что нашел это.