【发布时间】:2014-12-02 20:22:40
【问题描述】:
我正在尝试为 .csproj 文件创建 nuget 包,但希望包名不同于 csroj 文件(默认情况下),并且我不想指定 .nuspec 文件。有没有办法做到这一点?我只能在命令行选项上看到版本名称覆盖选项,而不是包名称覆盖选项。
我正在 TeamCity 中执行此操作,但这不是重点。我在想我需要将其他参数传递给 NuGet pack 命令吗?
谢谢,
【问题讨论】:
我正在尝试为 .csproj 文件创建 nuget 包,但希望包名不同于 csroj 文件(默认情况下),并且我不想指定 .nuspec 文件。有没有办法做到这一点?我只能在命令行选项上看到版本名称覆盖选项,而不是包名称覆盖选项。
我正在 TeamCity 中执行此操作,但这不是重点。我在想我需要将其他参数传递给 NuGet pack 命令吗?
谢谢,
【问题讨论】:
Nuget 命令行不提供任何直接更改名称的选项。 http://docs.nuget.org/docs/reference/command-line-reference#Pack_Command
如果您想要不同的项目和 nuget 包名称,您必须准备和编辑自定义 nuspec 文件。您也可以在使用例如创建包后手动执行此操作。 NuGetPackage 资源管理器。
【讨论】:
从 NuGet 4.0 开始,现在可以将包名称和其他元数据指定为 .csproj 文件中的属性。请参阅https://docs.microsoft.com/en-us/nuget/guides/create-net-standard-packages-vs2017 了解更多信息。
【讨论】:
Nuget 的 Properties 参数正是您要寻找的。p>
如果您的 .nuspec 文件使用占位符,那么您可以通过 Properties 参数为其传递一个值。来自nuget docs:
属性。指定 token=value 对的列表,用分号分隔,其中 .nuspec 文件中每次出现的 $token$ 都将替换为给定的值。值可以是引号中的字符串。
所以nuget.exe -Properties id=someProject 将使用“someProject”来处理$id$ 的任何出现。
【讨论】:
如果您有一个 A.nuspec,您仍然可以使用“nuget pack A.csproj”,您可以在其中指定自定义包名称,如下所示(否则包名称将与项目名称相同,即 A):
<?xml version="1.0"?>
<package >
<metadata>
<id>Custom A</id>
</metadata>
</package>
【讨论】: