ASP.NET工程檔案(.csproj)檔案解讀

knqiufan發表於2018-07-21

C#專案中都會有一個不起眼的檔案,字尾名csproj,很多人都會忽視它。其實,這個檔案在專案中起到舉足輕重的地位。這個檔案其實是一個專案的工程檔案,不過,正常開發中,這個檔案基本上不會需要考慮到。這時候,你應該會問這個檔案作用,其實,這個檔案記錄了與工程有關的相關資訊,例如包含的檔案,程式的版本,所生成的檔案的型別和位置的資訊等。

這個檔案其實是給編譯工具看的,這個檔案記錄了這個專案的專案名,專案引用,專案中檔案,專案用到的.net版本等等一系列資訊,因為之前在做持續整合遇到編譯問題,所以花了點時間學習這個檔案。

其中常見節點元素如下:

1)Project 節點

<Project ></Project >這個元素是工程檔案的根節點,所有其他節點都是在這個節點之下,用於表示專案的範圍

2)Property元素

 在專案中你肯定需要經常訪問一些資訊,這個節點用於記錄專案資訊的,例如需要建立的路徑名、最終生成的程式集名稱等。以name/value的形式新增進Property,隨後就可以以$(PropertyName)的形式訪問。

<PropertyGroup>

    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>

    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>

    <ProductVersion>8.0.30703</ProductVersion>

    <SchemaVersion>2.0</SchemaVersion>

    <ProjectGuid>{F630BB4D-A352-40C1-9C6B-CD9C5F77EAF1}</ProjectGuid>

    <OutputType>Library</OutputType>

    ...

    <RootNamespace>TCBase.Model</RootNamespace>

    <AssemblyName>TCBase.Model</AssemblyName>

    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>

    ...

</PropertyGroup>

這裡就需要解釋下節點的意思了:

 

Configuration節點,可以用於MSBuild傳參,後續寫關於MSBuild會詳細列出,這裡引數用於MSBuild編譯方式,一種是Dabug,還有一種是Release,直觀就是檔案生成bin目錄中生成是Debug還是Release

Platform節點,這個是表示執行解決方案平臺,在VS專案屬性中修改,VS中“配置管理器”-->“活動解決方案平臺”修改

ProkectGuid節點,這個我理解為這個專案在這個解決方案中的唯一標示,可以說是名字,瞭解的可以補充。

RootNamespace節點,這個表示這個專案的預設根名稱空間名字。

AssemblyName節點,這個表示專案生成dll後的名字。

     注意,一般一個工程檔案會有多個PropertyGroup節點,其中的Platform,AssemblyName等都可以不相同,編譯的時候會由傳入的引數決定的,如Debug會選擇Debug的節點,Release會選擇Release節點,預設會使用第一個,不過不建議修改,vs會生成的,除非你對這個非常熟,否則容易改錯。

   3)Item元素

 

在整個專案檔案中提供原始碼檔案、引用的程式集名稱、需要嵌入的圖示資源等,最為常用的部分。

語法:<Item Type=”TheType”Include=”NameOrPath” />

Type表示資源的類別

    .cs檔案設為Source

            程式集為Reference

Include是具體的資源,可以使路徑或者C#原始碼檔案的名稱。如要表示當前專案所有cs檔案,可以使用萬用字元*:

<Item Type="SourceInclude="*.cs" />

後面使用的時候就通過@(Source)來呼叫

基本Item節點有三種,一是引用dll檔案,一是原始碼檔案,還有一個是當前解決方案中的專案。

   4)ItemGroup元素

第一種

<ItemGroup>

    <ReferenceInclude="CnCookieInterface">

        <HintPath>..\TCWeb.SolutionItems\CnCookieInterface.dll</HintPath>

    </Reference>

        <ReferenceInclude="System" />

</ItemGroup>

其中Include後面表示引用在VS中顯示引用的名字,這裡可以修改,VS預設和檔名相同,如果是系統的就不需要HintPath節點,這個節點表示引用的dll路徑,這裡一般是相對路徑,注意,這裡路徑錯了,引用就找不到了,vs中有問題可以直接到這裡修改。

第二種

<ItemGroup>

    <CompileInclude="Car\CarOrderService.cs" />

    <CompileInclude="Common\CashCouponService.cs" />

</ItemGroup>

這個是當前專案的原始碼檔案即.cs檔案。

第三種

<ItemGroup>

    <ProjectReferenceInclude="..\TCWeb.Core\TCWeb.Core.csproj">

        <Project>{AC131436-6FB7-4332-BC6C-7950ECCE55BD}</Project>

        <Name>TCWeb.Core</Name>

    </ProjectReference>

</ItemGroup>

這個是引用當前解決方案中的專案,Include中表示引用專案的工程檔案,Name表示當前專案名,Project系統生成的,就是上面說的<ProjectGuid>幾點

總體上主要就這三種引用的方式

 

PS:

<Reference Include="FlightInter.MerchantService.Business ">

    <SpecificVersion>False</SpecificVersion>

    <HintPath>..\..\ExtDll\FlightInter.MerchantService.Business.dll</HintPath>

    <Private>False</Private>

</Reference>
注意其中的<Private>屬性,被這個坑了一次,這個表示是否複製到本地,不小心改到這個你會發現專案中會無緣無故複製很多檔案

相關文章