У файлі .csproj, для чого <None Include = "...">?


137

Як

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

відрізняється від

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

?


7
У мене було декілька Contents, які змінилися на Nones. Я думаю, що це сталося, коли я перейменував файли з .ascx в .cshtml при переході в Razor. Зміна їх назад вручну виправляла деякі проблеми з розгортанням. Радий, що я це знайшов.
Кріс

Відповіді:


135

Стаття MSDN про властивість дії збірки пояснює відмінності.

Ні - Файл не входить у групу виводу проекту та не компілюється в процесі збирання. Прикладом є текстовий файл, який містить документацію, наприклад, файл Readme.

Зміст - файл не компілюється, але входить до групи вихідних даних контенту. Наприклад, це налаштування є значенням за замовчуванням для .htm або іншого типу веб-файлів.


5
Дякую, у мене виникли проблеми з пошуком цієї посилання.
Емметт

Корисно, але навіщо взагалі містити елемент "None", якщо файл не повинен бути включений у висновок? В чому справа?
JimH44

1
@ JimH44 <None> елементи часто використовуються для конкретного копіювання файлів у вихідний каталог, навіть якщо вони за замовчуванням не входять у групу виводу . Якщо для файлу <None> виберіть пункт «Копіювати у каталог виводу» -> «Завжди копіюйте», це призведе до його копіювання, і ви побачите запис, доданий до файлу .csproj, який матиме проект, матиме запис <None> для файлу.
Помітний укладач

3
Тоді в чому різниця між файлом <None> з "Копіювати у вихідний каталог" -> "Копіювати завжди" та файлом <Зміст> із "Копіювати у вихідний каталог" -> "Копіювати завжди"?
хештейн

30

Одна різниця - те, як вони публікуються; Елементи "жодного" не включаються до публікації, "елементи вмісту" роблять; наприклад, у діалоговому вікні "Файли додатків" на вкладці Опублікувати.


8
Неправда. Принаймні, у новій точці чистий кліп. якщо у вас є елемент, оголошений як "Немає" з CopyToOutputDirectoryнабором до trueнього, він буде опублікований уdotnet publish
disklosr

13

Я не впевнений на 100% (я читав опис властивості Build Action MSDN ), але просто копіювання цієї відповіді з MSDN в StackOverflow не відповідає мені на це питання повністю.

Різниця None і Content має вплив лише на веб-проекти. Для проекту командного рядка, проекту WinForm або проекту UnitTest (в моєму випадку) тощо. None і Content не мають різної поведінки.

MSDN: "група вихідних проектів" або "група вихідних матеріалів" лише терміни, що використовуються у веб-проекті, правда?


2
Як ви кажете, здається, Nonevs Contentмає ефект лише для кроку опублікування, а не для складання . Здається, що крок збирання CopyToOutputDirectoryможе бути встановлений на будь-якому, що контролює, чи файл скопійований кроком збірки. Також дивно, що шаблони T4 за замовчуванням додаються як Contentелементи, а не Noneелементи.
Крістофер Кінг

8

У моїй ситуації мій файл 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) дала мені рекомендації, які я шукав:

Зауважте, що коли редактор ресурсів додає зображення, він встановлює Дію збірки на None , оскільки файл .resx посилається на файл зображення. Під час збирання зображення перетягується у файл .resources, створений із файлу .resx. Потім до зображення можна легко отримати доступ за допомогою сильно набраного класу, автоматично створеного для файлу .resx. Тому вам не слід змінювати цей параметр на Вбудований ресурс , оскільки це може включати зображення два рази в збірку.

Розв’язання. За допомогою цього керівництва за допомогою текстового редактора я змінив Contentелементи типу елементів на None.

Також для огляду елементів MSBuild дивіться цю статтю MSDN .


3

У мене є проект, який не містить об'єднаних елементів (він зберігає html та javascript для тестів на жасмин).

Одного разу моє рішення (яке містило згаданий проект) перестало писати слово "Ціль" Побудувати "не існує в проекті".

Я додав імпорт для залучення компілятора, який добре працював на моїй машині, але не вдалося використовувати msbuild на сервері збірки.

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

Потім я змінив рядок від

<None Include="SpecRunner.html" />

до

<Content Include="SpecRunner.html" />

і він працював і на сервері збірки.


2

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


1

У моєму випадку .Pubxml - один із таких файлів серед списку None . Він не призначений для побудови рішення або як статичний файл для веб-проекту. Але для публікації сайту в Azure, в цьому присутні конфігурації.

Відповідно до статті Microsoft, це основні типи, які ми бачимо серед тегів файлів .csproj :

Ні - Файл не входить у групу виводу проекту та не компілюється в процесі збирання. Прикладом є текстовий файл, який містить документацію, наприклад, файл Readme.

Компілювати - файл збирається у вихідний збір. Цей параметр використовується для файлів коду.

Зміст - файл не компілюється, але входить до групи вихідних даних контенту. Наприклад, це налаштування є значенням за замовчуванням для .htm або іншого типу веб-файлів.

Вбудований ресурс - Цей файл вбудований у основний вихід збірки проекту у вигляді DLL або виконуваного файлу. Зазвичай використовується для файлів ресурсів.


1
Будь ласка, прокоментуйте тут, якщо щось вводить в оману чи не зрозуміло, просто голосування, яке не має права, не допоможе мені покращити це. Заздалегідь спасибі.
Крішна кант

1
У мене часто виникає помилка: ім'я елемента "None" для включати "Властивості \ PublishProfiles \ FolderProfile.pubxml" має бути "Вміст". в моєму проекті Asp.Net на Bamboo, і коли-небудь повторна збірка може просто виправити її, тому не знаю, в чому саме проблема
Bochen Lin

Привіт @BochenLin, деталі, які ви згадали тут, трохи мізерні, чи можете ви спробувати дати тут більше деталей або опублікувати нове запитання із повними детальними відомостями про проблему та екраном, якщо це можливо [а потім поділіться посиланням на питання тут].
кришна кант

0

Файли вмісту не включаються в збірку, але містяться в публікації.

Жоден файл не входить у збірку чи публікацію, якщо вони не налаштовані таким чином. Наприклад, параметр "Копіювати у каталог вихідних даних" "Завжди" або "Новіше" призведе до їх включення як у збірку, так і у публікацію.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.