https://blog.csdn.net/austin_link/article/details/40596185
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
="
Source
"
Include
="
*.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>屬性,被這個坑了一次,這個表示是否復制到本地,不小心改到這個你會發現項目中會無緣無故復制很多文件