ASP工程文件(csproj)解讀


https://blog.csdn.net/austin_link/article/details/40596185

C#項目中都會有一個不起眼的文件,后綴名csproj,很多人都會忽視它。其實,這個文件在項目中起到舉足輕重的地位。這個文件其實是一個項目的工程文件,不過,正常開發中,這個文件基本上不會需要考慮到。這時候,你應該會問這個文件作用,其實,這個文件記錄了與工程有關的相關信息,例如包含的文件,程序的版本,所生成的文件的類型和位置的信息等。

這個文件其實是給編譯工具看的,這個文件記錄了這個項目的項目名,項目引用,項目中文件,項目用到的.net版本等等一系列信息,因為之前在做持續集成遇到編譯問題,所以花了點時間學習這個文件。

其中常見節點元素如下:

1)Project 節點

<Project ></Project >這個元素是工程文件的根節點,所有其他節點都是在這個節點之下,用於表示項目的范圍

2)Property元素

 在項目中你肯定需要經常訪問一些信息,這個節點用於記錄項目信息的,例如需要創建的路徑名、最終生成的程序集名稱等。以name/value的形式添加進Property,隨后就可以以$(PropertyName)的形式訪問。

 

  1.  
    <PropertyGroup>
  2.  
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
  3.  
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
  4.  
    <ProductVersion>8.0.30703</ProductVersion>
  5.  
    <SchemaVersion>2.0</SchemaVersion>
  6.  
    <ProjectGuid>{F630BB4D-A352-40C1-9C6B-CD9C5F77EAF1}</ProjectGuid>
  7.  
    <OutputType>Library</OutputType>
  8.  
    ...
  9.  
    <RootNamespace>TCBase.Model</RootNamespace>
  10.  
    <AssemblyName>TCBase.Model</AssemblyName>
  11.  
    <TargetFrameworkVersion>v4.0</TargetFrameworkVersion>
  12.  
    ...
  13.  
    </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元素

第一種

 

  1.  
    <ItemGroup>
  2.  
    <ReferenceInclude="CnCookieInterface">
  3.  
    <HintPath>..\TCWeb.SolutionItems\CnCookieInterface.dll</HintPath>
  4.  
    </Reference>
  5.  
    <ReferenceInclude="System" />
  6.  
    </ItemGroup>

 

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

第二種

 

  1.  
    <ItemGroup>
  2.  
    <CompileInclude="Car\CarOrderService.cs" />
  3.  
    <CompileInclude="Common\CashCouponService.cs" />
  4.  
    </ItemGroup>

 

這個是當前項目的源代碼文件即.cs文件。

第三種

 

  1.  
    <ItemGroup>
  2.  
    <ProjectReferenceInclude="..\TCWeb.Core\TCWeb.Core.csproj">
  3.  
    <Project>{AC131436-6FB7-4332-BC6C-7950ECCE55BD}</Project>
  4.  
    <Name>TCWeb.Core</Name>
  5.  
    </ProjectReference>
  6.  
    </ItemGroup>

 

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

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

 

PS:

 

  1.  
    <Reference Include="FlightInter.MerchantService.Business ">
  2.  
    <SpecificVersion>False</SpecificVersion>
  3.  
    <HintPath>..\..\ExtDll\FlightInter.MerchantService.Business.dll</HintPath>
  4.  
    <Private>False</Private>
  5.  
    </Reference>

注意其中的<Private>屬性,被這個坑了一次,這個表示是否復制到本地,不小心改到這個你會發現項目中會無緣無故復制很多文件


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM