Dot-Net

dotnet pack - 你如何指定包的名稱?

  • January 15, 2021

我正在嘗試在 powershell 中將庫打包為 NuGet 包,如下所示:

function Create-NuGetPackages($projects) {

   if (!(Test-Path $NuGetPackageDirectory)) {
       New-Item $NuGetPackageDirectory -ItemType Directory
   }
   
   foreach ($project in $projects) {
       pushd $project.DirectoryName

       & dotnet.exe pack --configuration $Configuration --output $NuGetPackageDirectory --no-build

       popd
   }

   return $NuGetPackageDirectory
}

該項目正在使用一個project.json和一個文件(在 .NET 4.5.1 中.xproj還有一個用於處理該項目的文件)。.csproj上面的命令起作用,但我最終得到了一個 NuGet 包名稱MyProject.Core,我需要它來MyProject匹配舊包。

該項目是一個埠,最明智的做法是以Java包命名文件夾,即MyProject.Core,但我似乎無法弄清楚如何使其生成具有不同名稱的NuGet包。

我曾嘗試在 CLI 上使用此命令:

dotnet pack "src\MyProject.Core\MyProject.csproj" --output NuGetPackages\ --configuration "Release"

但它給出了錯誤:

Unable to find a project.json in src\MyProject.Core\MyProject.csproj\project.json

根據此頁面

項目

要打包的項目。它是 csproj 文件或目錄的路徑。如果省略,則預設為目前目錄。

那麼為什麼如果我指定 csproj 的路徑,它會尋找 project.json 文件呢?

我可以通過指定以下內容來解決程序集名稱的這個問題:

"buildOptions": { "outputName": "MyProject" },

但是 pack 命令完全忽略了這一點。似乎也沒有選項可以在該packOptions部分中指定 NuGet 包的名稱。

我看了一下這個老問題,但看起來他們在談論 nuget 工具,而不是 dotnet 工具。

是我重命名文件夾的唯一選擇(現在可能會導致很多其他東西中斷),還是有另一種方法來指定dotnet pack命令的 NuGet 包名稱?

在旁注中,我已經在幾個地方讀到了project.json正在消失的內容,我們將回到.csproj,但尚不清楚何時生效。我應該以消除project.json文件為目標還是為時過早?

對於仍然有這個問題的人

dotnet pack -p:PackageID=my_id

正如文件所說,元數據在 csproj 中指定,

https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017#edit-metadata-in-the--csproj-file

<PropertyGroup>
<TargetFramework>netstandard1.4</TargetFramework>
<PackageId>AppLogger.YOUR_NAME</PackageId>
<PackageVersion>1.0.0</PackageVersion>
<Authors>YOUR_NAME</Authors>
<Description>Awesome application logging utility</Description>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<PackageReleaseNotes>First release</PackageReleaseNotes>
<Copyright>Copyright 2016 (c) Contoso Corporation. All rights reserved.</Copyright>
<PackageTags>logger logging logs</PackageTags>
</PropertyGroup>

引用自:https://stackoverflow.com/questions/43170721