日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)...

發(fā)布時(shí)間:2025/6/17 47 豆豆
生活随笔 收集整理的這篇文章主要介紹了 项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)... 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?

知道了 csproj 文件中的一些常用 NuGet 屬性,創(chuàng)建 NuGet 包時(shí)就可以充分發(fā)揮新 Sdk 自動(dòng)生成 NuGet 包的優(yōu)勢,不需要 nuspec 文件啦。(畢竟 nuspec 文件沒有 .csproj 和 .targets 文件強(qiáng)大而又有擴(kuò)展性。)


“項(xiàng)目文件中的已知屬性系列”分為兩個(gè)部分:

  • 項(xiàng)目文件中的已知屬性(知道了這些,就不會(huì)隨便在 csproj 中寫死常量啦) - 呂毅
  • 本文:項(xiàng)目文件中的已知 NuGet 屬性(使用這些屬性,創(chuàng)建 NuGet 包就可以不需要 nuspec 文件啦) - 呂毅

NuGet 相關(guān)的屬性也分為全局屬性和項(xiàng)屬性兩類。不過,我更愿意分成三類來說明:

nuspec 屬性

當(dāng)然,這部分的屬性也是在 csproj 中使用的,是為了生成 nuspec 文件。

使用方法像這樣:

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><PackageId>Walterlv.Demo</PackageId><PackageVersion>3.2.0-beta</PackageVersion><TargetFramework>net46</TargetFramework></PropertyGroup> </Project>

不過我們通常沒有這么直接去設(shè)置,因?yàn)榇蠖鄶?shù)屬性都是有默認(rèn)值的,如果不設(shè)置,將自動(dòng)使用默認(rèn)值。甚至什么都不寫也能生成正確的 nuspec 文件。

  • $(PackageId): NuGet 包的唯一 Id,對(duì)應(yīng) NuGet 的 Id 屬性。這個(gè) Id 需要在整個(gè)服務(wù)器(例如 nuget.org)上唯一,如果沒設(shè)置,則使用 $(AssemblyName);例如 Newtonsoft.Json。
  • $(PackageVersion): NuGet 包的包版本,可以使用語義版本號(hào)(參見語義版本號(hào)(Semantic Versioning) - 呂毅),如果沒設(shè)置,則使用 $(Version);例如 3.2.0-beta。
  • $(PackageVersionPrefix): 包版本前綴,默認(rèn)為空。
  • $(PackageVersionSuffix): 包版本后綴,默認(rèn)為空。
  • $(Authors): 包的作者;建議指定成在 nuget.org 上的用戶名,這樣訪客可以點(diǎn)擊包作者查看到包作者的信息;多個(gè)名字用分號(hào)分隔。
  • $(Title): 包的顯示名稱,如果沒設(shè)置,則使用 $(PackageId)。
  • $(PackageDescription): 包的描述文字,如果填寫了,則用戶在瀏覽包的時(shí)候可以看到。
  • $(Copyright): 包的版權(quán)聲明
  • $(PackageRequireLicenseAcceptance): 是個(gè)布爾值,如果為 true,則在安裝包之前要求同意協(xié)議。
  • $(PackageLicenseUrl): 此 NuGet 包協(xié)議所在的 url。
  • $(PackageProjectUrl): 此 NuGet 包的項(xiàng)目 url。
  • $(PackageIconUrl): 此 NuGet 包的圖標(biāo) url,無論是 nuget.org 還是 Visual Studio 都將從這個(gè) url 下載包的圖標(biāo)。
  • $(PackageTags): 標(biāo)簽,用分號(hào)分隔;指定多個(gè)標(biāo)簽有助于用戶在 nuget.org 上搜索到你的 NuGet 包。
  • $(PackageReleaseNotes): 這個(gè)版本的 Release 記錄。
  • $(RepositoryUrl): 倉庫 url,例如 https://github.com/dotnet-campus/MSTestEnhancer.git
  • $(RepositoryType): 倉庫類型,例如 git、tfs。
  • $(RepositoryBranch): NuGet 4.7 才開始的新屬性!此包對(duì)應(yīng)的倉庫分支,例如 master。
  • $(RepositoryCommit): NuGet 4.7 才開始的新屬性!此包對(duì)應(yīng)的提交號(hào),例如 2d3ef96ee704d7896eeb2d88fbc987b2004ff786。
  • $(PackageType): 我還沒有理解到此屬性的作用。

以上有些信息在每次 NuGet 發(fā)布之前都是要改的,例如:$(PackageVersion)、$(PackageReleaseNotes)、$(RepositoryCommit)。所以很明顯——這不是用來給開發(fā)者設(shè)置的屬性,是用于輔助我們生成打包工具的。

配置屬性

這些屬性會(huì)影響生成 NuGet 包的過程。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><!-- 此程序集不可打包,通常在單元測試項(xiàng)目中設(shè)置此屬性。 --><IsPackable>false<IsPackable><Description><Description><DevelopmentDependency><DevelopmentDependency><PackageOutputPath><PackageOutputPath><!-- 如果指定為 true,那么還會(huì)額外生成 PackageId.symbols.nupkg 包,除了原有包的內(nèi)容外,還額外包含全部的輸出文件,以及源碼和項(xiàng)目文件,用于調(diào)試。 --><IncludeSymbols>true<IncludeSymbols><!-- 大致與 IncludeSymbols 相同,不過只會(huì)額外把 pdb 和 Compile 類型的文件打包到 NuGet 包中。如果使用 ProjectReference 引用的項(xiàng)目沒有指定 TreatAsPackageReference=false,也會(huì)一起被打包。 --><IncludeSource>true<IncludeSource><PackageTypes><PackageTypes><!-- 如果指定為 true,那么生成的 dll 將拷貝到 NuGet 包的 tools 目錄下。 --><IsTool>true<IsTool><!-- 如果 lib/**/*dll 中沒有發(fā)現(xiàn) dll,NuGet 打包過程中會(huì)有警告;將這個(gè)屬性設(shè)為 true 可以禁用警告;這在制作純工具型 NuGet 包是非常有用。 --><NoPackageAnalysis>true<NoPackageAnalysis><MinClientVersion><MinClientVersion><IncludeContentInPack><IncludeContentInPack><!-- 默認(rèn)情況下,項(xiàng)目輸出的 dll 會(huì)被打包到 lib 目錄下;設(shè)置了此屬性后,就可以打包到其他目錄下了。此例打包到 task 目錄下 --><BuildOutputTargetFolder>tasks<BuildOutputTargetFolder><ContentTargetFolders><ContentTargetFolders><!-- 以下屬性都是為了使用單獨(dú)的 nuspec 文件而準(zhǔn)備的;如果不使用 nuspec 文件,通常無需設(shè)置這些屬性。 --><!-- 默認(rèn)情況下,使用 dotnet pack 打 NuGet 包時(shí),也會(huì)順便編譯;但設(shè)置此值為 true 后,就會(huì)像 nuget.exe 那樣不進(jìn)行編譯了。 --><NoBuild>true</NoBuild><!-- 默認(rèn)是 true,如果指定為 false,那么項(xiàng)目編譯輸出的 dll 文件將不會(huì)被打包到 NuGet 包中。 --><IncludeBuildOutput>false<IncludeBuildOutput><!-- 如果需要額外手工編寫 nuspec 文件,那么使用此屬性指定絕對(duì)或相對(duì)路徑。 --><NuspecFile>Walterlv.Demo.nuspec<NuspecFile><!-- 生成的屬性可以時(shí) nuspec 文件中的占位符生效,例如 <file src="$SampleProperty$" target="src/" /> --><NuspecProperties>SampleProperty=Program.cs<NuspecProperties><!-- 如果 NuspecFile 使用相對(duì)路徑,那么就會(huì)相對(duì)于此路徑;通常不需要指定。 --><NuspecBasePath><NuspecBasePath></PropertyGroup> </Project>

以上沒有設(shè)置值和注釋的屬性,我正在查閱資料。

項(xiàng)屬性

文件

為了脫離 nuspec 文件來打包,csproj 中需要對(duì)特殊用途的文件設(shè)置特別的 NuGet 屬性。

例如 Pack 屬性可以額外指定一或一組通配符文件需要被打包到 NuGet 包中;PackagePath 則指定了打包到 NuGet 包的路徑(NuGet 會(huì)通過擴(kuò)展名來自動(dòng)識(shí)別這是文件夾還是文件,所以可以通過這個(gè)屬性來重新指定名稱,但無法重新指定擴(kuò)展名)。

<Project Sdk="Microsoft.NET.Sdk"><PropertyGroup><Content Include="readme.txt"><Pack>true</Pack><PackagePath>\</PackagePath></Content><Content Include="PackageId.targets"><Pack>true</Pack><PackagePath>buildMultiTargeting\</PackagePath></Content></PropertyGroup> </Project>

引用

引用中也可以加入一些 NuGet 包的生成屬性。

無論是 <ProjectReference /> 還是 <PackageReference />,都可以額外加上 <IncludeAssets> <ExcludeAssets> <PrivateAssets> 屬性。

使用方法類似這樣:

<PackageReference Include="Walterlv.Demo" Version="3.0.0-beta"><IncludeAssets>all</IncludeAssets><ExcludeAssets>contentFiles</ExcludeAssets><PrivateAssets>contentFiles;analyzers</PrivateAssets> </PackageReference>

或者這樣:

<PackageReference Include="Walterlv.Demo" Version="3.0.0-beta" PrivateAssets="all" />

不區(qū)分大小寫。

  • <IncludeAssets> 引用的項(xiàng)目或包中的指定部分是本項(xiàng)目的依賴項(xiàng)。默認(rèn)為 all。
  • <ExcludeAssets> 引用的項(xiàng)目或包中的指定部分不是本項(xiàng)目的依賴項(xiàng),應(yīng)該排除。默認(rèn)為 none。
  • <PrivateAssets> 引用的項(xiàng)目或包中的指定部分依然是本項(xiàng)目的依賴項(xiàng),但是在打 NuGet 包時(shí)不作為依賴項(xiàng)(不會(huì)傳遞到下一個(gè)項(xiàng)目)。默認(rèn)為 contentfiles;analyzers;build。

如果你正試圖用 NuGet 編寫一個(gè)編譯時(shí)工具,那么,你可能需要在所有引用的最后加上如下行,將所有的包引用都設(shè)為 PrivateAssets。

<PackageReference Update="@(PackageReference)" PrivateAssets="All" />

如果你希望了解 Reference PackageReference 以及上面 @ 的含義,可以閱讀我的另一篇文章:理解 C# 項(xiàng)目 csproj 文件格式的本質(zhì)和編譯流程 - walterlv。


參考資料

  • NuGet pack and restore as MSBuild targets - Microsoft Docs
  • NuGet PackageReference format (package references in project files) - Microsoft Docs

轉(zhuǎn)載于:https://www.cnblogs.com/walterlv/p/10236460.html

總結(jié)

以上是生活随笔為你收集整理的项目文件中的已知 NuGet 属性(使用这些属性,创建 NuGet 包就可以不需要 nuspec 文件啦)...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。