使用NuGet Pack时,可以在没有nuspec文件的情况下指定包名称

本文关键字:文件 nuspec 情况下 包名 Pack NuGet 使用 | 更新日期: 2023-09-27 18:25:51

我正试图为.csproj文件创建一个nuget包,但希望包名与csroj文件(默认情况下是csroj)不同,并且我不想指定.nuspec文件。有办法做到这一点吗?我只能在命令行选项中看到版本名称替代选项,而不能看到包名称替代选项。

我在TeamCity做这件事,但这不是重点。我想我需要向NuGet pack命令传递额外的参数吗?

谢谢,

使用NuGet Pack时,可以在没有nuspec文件的情况下指定包名称

Nuget命令行不提供任何直接更改名称的选项。http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command

如果你想改变项目和nuget包的名称,你必须准备和编辑自定义的nuspec文件。您也可以在创建包后使用例如NuGetPackage Explorer手动执行此操作。

从NuGet 4.0,现在可以在.csproj文件中指定包名称和其他元数据作为属性。看见https://learn.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017了解更多信息。

Nuget的Properties参数就是您想要的。

如果.nuspec文件使用占位符,则可以通过Properties参数为其传递值。来自nuget文档:

属性。指定由分号分隔的token=value对的列表,其中.nuspec文件中每次出现$token$都将替换为给定的值。值可以是带引号的字符串。

因此,nuget.exe -Properties id=someProject将对$id$的任何出现使用"someProject"。

如果你有一个A.nuspec,你仍然可以使用"nuget-packA.csproj",你可以在其中指定一个自定义包名称,如下所示(否则包名称将与项目名称相同,即A):

<?xml version="1.0"?>
<package >
  <metadata>
    <id>Custom A</id>
  </metadata>
</package>

因为我没有看到任何更新的解决方案。在.csproj中,您可以指定PackageId

<PackageId>Different.Name.Than.Csproj</PackageId>

MS参考