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檔案,可以使用萬用字元*:
<
item
type
="
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...