Що таке файл CSProj?
Файли з розширенням CSPROJ являють собою файл проекту C#, який містить список файлів, включених до проекту, а також посилання на системні збірки. Коли новий проект ініціюється в Microsoft VIiual Studio, ви отримуєте один файл .csproj разом із файлом основного рішення (.sln). Якщо в проекті є більше однієї збірки, також буде однакова кількість файлів проекту, де файл .sln пов’язує їх разом як частину проекту. Вміст цього файлу визначає всі вимоги, необхідні для побудови проекту, як-от вміст, який потрібно включити, вимоги до платформи, інформацію про версії, параметри веб-сервера або сервера бази даних, а також завдання, які потрібно виконати. Вміст файлу проекту впорядковано у форматі файлу XML і може бути відкритий у будь-якому текстовому редакторі для редагування та перегляду. Це також забезпечує логічне подання файлів проекту для правильного розташування.
Формат файлу CSPROJ
Розробники можуть самостійно створювати файли проекту, дотримуючись MSBuild XML Schema. Відкрита та прозора структура файлів проекту дозволяє розробникам додатків здійснювати складний і детальний контроль над створенням і розгортанням проектів. Вміст такого файлу проекту має чіткий зв’язок між собою. На наступному малюнку показано ключові елементи та зв’язок між ними для такого файлу проекту.
У наступних розділах описано елементи формату файлу проекту.
Елемент проекту
Елемент Project є кореневим елементом кожного файлу проекту. Він визначає схему XML для файлу проекту та може містити атрибути для визначення точок входу для процесу збірки.
<Project ToolsVersion#"4.0" DefaultTargets#"FullPublish"
xmlns#"http://schemas.microsoft.com/developer/msbuild/2003">
</Project>
Властивості та умови
Властивості представляють необхідну інформацію, необхідну для створення проекту. Такі властивості визначаються в елементі PropertyGroup. Ці властивості складаються з пар ключ-значення, де назва елемента властивості визначає ключ властивості, а вміст елемента визначає значення властивості. Наприклад, ви можете визначити властивості з іменами ServerName і ConnectionString для зберігання статичного імені сервера та рядка підключення.
<PropertyGroup>
<ServerName>FABRIKAM\TEST1</ServerName>
<ConnectionString>
Data Source#FABRIKAM\TESTDB;InitialCatalog#ContactManager,...
</ConnectionString>
</PropertyGroup>
Умови можна вказати через елементи, щоб визначити критерії для оцінки елемента. Це визначається умовним словом під час визначення властивості, як показано нижче:
<PropertyGroup>
<OutputRoot Condition#" '$(OutputRoot)'##'' ">..\Publish\Out\</OutputRoot>
...
</PropertyGroup>
Коли MSBuild обробляє це визначення властивості, він спочатку перевіряє, чи доступне значення властивості $(OutputRoot). Якщо значення властивості пусте, іншими словами, користувач не вказав значення для цієї властивості, умова оцінюється як true, а значення властивості встановлюється на ..\Publish\Out.
Елементи та групи елементів
Файл проекту визначає вхідні дані для процесу збирання, які насправді є різними типами файлів. У номенклатурі MSBuild ці вхідні дані представлені елементами Item і визначені в елементі ItemGroup. Подібно до елементів Property, ви можете назвати елемент Item як завгодно. Однак ви повинні вказати атрибут Include, щоб ідентифікувати файл або символ підстановки, який представляє елемент.
<ItemGroup>
<ProjectsToBuild Include#"$(SourceRoot)ContactManager-WCF.sln"/>
</ItemGroup>
Цілі та завдання
Елемент Task представляє окрему інструкцію зі створення (або завдання). MSBuild містить безліч попередньо визначених завдань. Наприклад:
- Завдання Копіювати копіює файли в нове розташування.
- Завдання Csc викликає компілятор Visual C#.
- Завдання Vbc викликає компілятор Visual Basic.
- Завдання Exec запускає вказану програму.
- Завдання Message записує повідомлення до реєстратора.
Завдання завжди мають міститися в елементах Target. Елемент Target — це набір із одного чи кількох завдань, які виконуються послідовно, а файл проекту може містити кілька цілей.
<Project xmlns#"http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name#"LogMessage">
<Message Text#"Hello world!" />
</Target>
</Project>