ASP工程檔案(csproj)解讀

2021-06-26 16:06:16 字數 2679 閱讀 1769

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

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

其中常見節點元素如下:

1)project節點

這個元素是工程檔案的根節點,所有其他節點都是在這個節點之下,

用於表示專案的範圍 2)

property元素

在專案中你肯定需要經常訪問一些資訊,這個節點用於記錄專案資訊的,例如需要建立的路徑名、最終生成的程式集名稱等。以

name/value

的形式新增進

property

,隨後就可以以

$(propertyname)

的形式訪問。

debug

anycpu

8.0.30703

2.0library

...tcbase.model

tcbase.model

v4.0

...

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

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元素

在整個專案檔案中提供

源**檔案、引用的程式集名稱、需要嵌入的圖示資源等,最為常用的部分。

語法:type

=」thetype

」include

=」nameorpath

」 />

type

表示資源的類別

.cs檔案設為

source

程式集為

reference

include

是具體的資源,可以使路徑或者c#源**檔案的名稱

。如要表示當前專案所有cs檔案,可以使用萬用字元*:

<itemtype="source"include="*.cs" />

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

基本item

節點有三種,一是引用

dll檔案,一是源**檔案,還有乙個是當前解決方案中的專案。

4)itemgroup元素

第一種

..\tcweb.solutionitems\cncookieinte***ce.dll

其中include

後面表示引用在vs中顯示引用的名字,這裡可以修改,vs預設和檔名相同,如果是系統的就不需要

hintpath

節點,這個節點表示引用的

dll路徑,這裡一般是相對路徑,注意,這裡路徑錯了,引用就找不到了,vs中有問題可以直接到這裡修改。

第二種

這個是當前專案的源**檔案即

.cs檔案。

第三種

tcweb.core

這個是引用當前解決方案中的專案,

include

中表示引用專案的工程檔案,

name

表示當前專案名,

project

系統生成的,就是上面說的

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

ps:

false

..\..\extdll\flightinter.merchantservice.business.dll

false

注意其中的屬性,被這個坑了一次,這個表示是否複製到本地,不小心改到這個你會發現專案中會

無緣無故

複製很多檔案

csproj檔案的用途

2008年11月08日 星期六 14 46 不管是不是有人會說老趙是 學術派 學術派 是不是適合 做專案 我還是要強調事物的 概念 和描述乙個問題的嚴謹性。我不認為在面試時回答 我都是在做實際專案,但是對於概念都不太關心 的人真有能力把專案做好。老趙覺得將一些事物的概念理清之後,有些推論自然而然就得...

阻止新的csproj工程的dll引用繼承

visualstudio傳統的csproj工程中,引用是沒有繼承功能的。例如,對於如下乙個引用關係 assembly 1引用assembly 2 在大部分場景下,這是乙個非常好的特性,大大減少了我們手動引用dll的操作。但是,有的時候,這個卻不是我們想要要的結果,例如如下的場景 另外,預設繼承也會帶...

asp複製檔案函式,asp移動檔案函式

複製檔案 function copyfiles tempsource,tempend dim fso set fso server.createobject scripting.filesystemobject if fso.fileexists tempend then response.writ...