Відповіді:
Стаття 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) дала мені рекомендації, які я шукав:
Зауважте, що коли редактор ресурсів додає зображення, він встановлює Дію збірки на None , оскільки файл .resx посилається на файл зображення. Під час збирання зображення перетягується у файл .resources, створений із файлу .resx. Потім до зображення можна легко отримати доступ за допомогою сильно набраного класу, автоматично створеного для файлу .resx. Тому вам не слід змінювати цей параметр на Вбудований ресурс , оскільки це може включати зображення два рази в збірку.
Розв’язання. За допомогою цього керівництва за допомогою текстового редактора я змінив Content
елементи типу елементів на None
.
Також для огляду елементів MSBuild дивіться цю статтю MSDN .
У мене є проект, який не містить об'єднаних елементів (він зберігає html та javascript для тестів на жасмин).
Одного разу моє рішення (яке містило згаданий проект) перестало писати слово "Ціль" Побудувати "не існує в проекті".
Я додав імпорт для залучення компілятора, який добре працював на моїй машині, але не вдалося використовувати msbuild на сервері збірки.
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
Потім я змінив рядок від
<None Include="SpecRunner.html" />
до
<Content Include="SpecRunner.html" />
і він працював і на сервері збірки.
У моєму випадку .Pubxml - один із таких файлів серед списку None . Він не призначений для побудови рішення або як статичний файл для веб-проекту. Але для публікації сайту в Azure, в цьому присутні конфігурації.
Відповідно до статті Microsoft, це основні типи, які ми бачимо серед тегів файлів .csproj :
Ні - Файл не входить у групу виводу проекту та не компілюється в процесі збирання. Прикладом є текстовий файл, який містить документацію, наприклад, файл Readme.
Компілювати - файл збирається у вихідний збір. Цей параметр використовується для файлів коду.
Зміст - файл не компілюється, але входить до групи вихідних даних контенту. Наприклад, це налаштування є значенням за замовчуванням для .htm або іншого типу веб-файлів.
Вбудований ресурс - Цей файл вбудований у основний вихід збірки проекту у вигляді DLL або виконуваного файлу. Зазвичай використовується для файлів ресурсів.
Файли вмісту не включаються в збірку, але містяться в публікації.
Жоден файл не входить у збірку чи публікацію, якщо вони не налаштовані таким чином. Наприклад, параметр "Копіювати у каталог вихідних даних" "Завжди" або "Новіше" призведе до їх включення як у збірку, так і у публікацію.
Content
s, які змінилися наNone
s. Я думаю, що це сталося, коли я перейменував файли з .ascx в .cshtml при переході в Razor. Зміна їх назад вручну виправляла деякі проблеми з розгортанням. Радий, що я це знайшов.