日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

.csproj 文件

發布時間:2023/12/20 编程问答 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 .csproj 文件 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

.csproj 文件

.csproj,是C#項目文件的擴展名,它是“C Sharp Project”的縮寫。.net開發環境中建立項目時,會產生.csproj文件,這是C#的工程文件,其中記錄了與工程有關的相關信息,例如包含的文件,程序的版本,所生成的文件的類型和位置信息等。

【作用】

.csproj究竟是做什么用的?它是給開發工具用的,例如我們再熟悉不過的Visual Studio,以及大家可能沒有接觸過的MSBuild.exe。

Visual Studio會根據csproj里的XML定義來管理項目文件以及相關其他一些種類非常豐富的數據及操作,MSBuild也會根據csproj文件來得知編譯這個項目需要有哪些依賴,默認輸出路徑,Pre-Build和Post-Build需要哪些操作等。

Visual Studio和MSBuild都是開發工具,這就是csproj存在的唯一意義:為“開發工具”提供信息。而到了運行環境中,根本不會有人關心所謂的csproj文件——也就是“程序是從哪里來的”。

【各個部件的作用】

PropertyGroup

PropertyGrouph是用來存放屬性的地方,這與它的名字非常契合。

在這里寫屬性就像在代碼中定義屬性或變量一樣,只要寫了,就會生成一個指定名稱的屬性。

比如,我們寫:

<PropertyGroup><Foo> watermelon is a fruit </Foo> </PropertyGroup>

那么,就會生成一個 Foo 屬性,值為字符串 watermelon is a fruit。至于這個屬性有什么用,那就不歸這里管了。

PropertyGroup可以定義很多個,里面都可以同等地放屬性。至于為什么會定義多個,原因無外乎有兩個:

  • 增加可讀性 —— 將一組相關的屬性放在一起,便于閱讀和理解意圖;
  • 便于加條件 —— 有的屬性在 Debug 和 Release 下不一樣(例如條件編譯符 DefineConstants)。
  • ItemGroup

    ItemGroup是用來指定集合的地方。

    集合里面一些常見的項:

    • Reference:引用某個程序集
    • PackageReference:引用某個NuGet包
    • ProjectReference:引用某個項目
    • Compile:常規的 C# 編譯
    • None:執行一些通用的操作(或者只是為了在 Visual Studio 列表中能夠有一個顯示)
    • Folder:一個空的文件夾

    ItemGroup 也可以放很多組,同樣是為了提升可讀性或者增加條件。

    Import

    Import是為了導入屬性(props)和Targets(后面會具體說Targets)。

    被我們 Import 進來的那些文件,可以用兩種擴展名表示,一種是用來定義屬性,為 .props;另一種用來定義行為,為 .targets。這兩種文件除了含義不同以外,內容的格式都是完全一樣的 —— 即 csproj 文件格式。

    雖然 csproj 文件中可以完全實現引入的 props 文件的功能,但為了在多個項目中使用,一處更新,到處生效,因此選擇單獨用 props 文件來存放。

    Target

    一般來說, Target 節點寫在 csproj 文件的末尾,但這個并不是強制的。Targets 是一種非常強大的功能擴展方式,支持 msbuild 預定義的一些指令,支持命令行,甚至支持使用 C# 直接編寫(當然編譯成 dll 會更方便些),還支持這些的排列組合和順序安排。而我們實質上的編譯過程便全部由這些 Targets 來完成。甚至可以說,編譯過程就是靠這些 Target 的組合來完成的

    Project

    所有的 csproj 文件都是以 Project 節點為根節點。

    下面列出新舊兩款 csproj 文件格式的差異:

    其中,在各部件中,白色代表必須,灰色代表可選;而更接近背景色的灰色代表一般情況下都是不需要的。

    可以看出,新格式的最大好處之一就是簡潔。而這一優勢,靠的就是 Project 節點,新格式中的 Project 節點有 sdk 屬性 —— 所謂 sdk,其實是一大波 .targets 文件的集合。它幫我們導入了公共的屬性、公共的編譯任務,還幫我們自動將項目文件夾下所有的 **\*.cs 文件都作為 ItemGroup 的項引入進來。

    【 .sln 和 .csproj 的區別】

    1. .sln:即 solution,解決方案

    ??? .csproj:即 C sharp project,C# 項目

    2. 解決方案是項目的集合,項目是文件的集合;一個 sln 中可以包含多個 csproj。一個 csproj 可以包含多個文件; csproj 可以作為單獨的項目運行,也可以在 sln 中添加 csproj 統一管理。

    3. sln 和 csproj 都可以雙擊運行,如果解決方案中只有一個項目,那么兩個方式是沒有區別的;但是如果一個解決方案中包含多個項目, sln 會加載該解決方案中所有的項目,而 csproj 只會加載當前項目。

    4. 關于 sln 和 csproj 的幾個問題

    (1)C#、.net 中,.sln 文件可以刪掉重新生成嗎?

    .sln 是項目文件,刪除后項目的一些設置會無法恢復,因為解決方案里面可能有關于這個項目文件的很多信息,所以一般不建議刪除重建;但一般也沒有太大的問題,用VS直接打開 .csproj 工程文件,會自動建上 sln 的。

    (2)下載的 ASP.net 源碼沒有.sln 或 .csproj 文件如何使用?

    從 Visual Studio IDE 的菜單? "文件" --> "打開" --> "網站" ,然后從右邊的目錄中選擇要打開的網站目錄,不需要有 .sln 文件就可以打開網站并調試運行。如果是 WebSite 模式那么是不需要 .sln 文件的,可以通過 File -> WebSite -> OpenWebSite 打開。如果不是 WebSite 模式,那么可以自己建立一個空項目,然后把文件 Copy 進去即可。

    ?

    參考鏈接:https://blog.csdn.net/han_better/article/details/64140875

    總結

    以上是生活随笔為你收集整理的.csproj 文件的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。