58

最近,我开始从我的几个项目中打包 nuget 包。首先,我从 Package Explorer 应用程序开始。这是一个不错的工具,但如果您进行持续集成,它的用处就会降低。然后我研究了指定nuspec模板文件,并将更改的数据(例如版本号)作为命令行参数传递。后来想知道如何定义nuget包依赖。事实证明,如果您指定csproj, nuget.exe已经基于package.config执行此操作。此外,它还从程序集信息中提取作者、版本、版权等相关数据。我现在缺少的是在命令行中指定 licenseUrl 的能力。但我希望这个问题更笼统。所以我问:

打包 nuget 包的首选方式是什么?

4

4 回答 4

95

这是一个鲜为人知的事实:您可以将两者结合起来!以 csproj 文件为目标,并确保在同一目录中有一个与 csproj 文件同名的 nuspec 文件。NuGet 将在包创建期间将两者合并。

简而言之: target <ProjectName>.csproj,可选择添加一个相应的标记化 <ProjectName>.nuspec文件,以供 NuGet.exe 用作元数据。

它使您免于管理输出位置、依赖项、版本和其他可以从项目派生的东西。

于 2013-02-11T08:05:25.483 回答
17

For simple packages you can directly create the packages off .csproj or .vbproj. But for more advance packages, especially when you need to pull in custom files into your package, you need to use .nuspec. I usually start off with the csproj and move to nuspec as needed. You can always get the nuspec using the command nuget spec on the csproj.

https://docs.nuget.org/create/creating-and-publishing-a-package

You can specify any of the properties including licenseUrl using the Properties parameter to nuget pack

nuget pack -properties licenseUrl=http://blah
于 2013-02-10T14:06:40.720 回答
17

使用 Visual Studio 2017 的 .csproj,您不需要 .nuspec 文件。您实际上可以将这些值直接添加到您的 csproj 中,它会拾取它们。

在 Visual Studio 中右键单击项目,编辑 xxxxx.csproj。记事本也很好用。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <Version>1.0.1</Version>
    <authors>Subtracts</authors>
    <TargetFrameworks>netstandard1.6;net452</TargetFrameworks>
    <AssemblyName>Checkout.net</AssemblyName>
    <PackageId>Checkout.net</PackageId>

...

</Project>

ps 由于我没有足够的声誉来发表评论,因此我将留下答案,而不是对 Xavier 的答案发表评论。:)

于 2017-02-03T00:41:21.107 回答
8

自 2018 年 2 月起,使用 .NET Core 时,除了基本规范文件属性之外,您还需要提供一个.nuspec文件。

但该dotnet pack命令不会使用该.nuspec文件,除非您添加<NuspecFile>relative path to nuspec</NuspecFile>到该.csproj文件中。

https://github.com/dotnet/cli/issues/2170

大多数包现在可以在没有.nuspec文件的情况下制作。需要注意的是依赖关系。您可能需要为PrivateAssets一些工具添加一个元素,比如msbump和嗯,也许是 SpecFlow。

<PackageReference Include="msbump" Version="2.3.2">
  <PrivateAssets>all</PrivateAssets>
</PackageReference>

这会阻止这个包依赖“流动”到你的包的依赖。

还值得一读以最灵活的方式指定版本。

https://docs.microsoft.com/en-us/nuget/consume-packages/dependency-resolution#floating-versions

和范围语法。

https://docs.microsoft.com/en-us/nuget/reference/package-versioning#references-in-project-files-packagereference

于 2018-02-16T11:44:01.620 回答