nuget-packing csproj与nuspec之间的差异

时间:2013-02-10 12:04:55

标签: c# .net nuget

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

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

4 个答案:

答案 0 :(得分:72)

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

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

它使您免于管理输出位置,依赖项,版本以及可从项目中派生的其他内容。

答案 1 :(得分:17)

对于简单包,您可以直接从.csproj.vbproj创建包。但是对于更高级的包,尤其是当您需要将自定义文件提取到包中时,需要使用.nuspec。我通常从csproj开始,根据需要移动到nuspec。您始终可以使用csproj上的nuget spec命令获取nuspec。

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

您可以使用licenseUrl参数Properties

指定包括nuget pack在内的任何属性
nuget pack -properties licenseUrl=http://blah

答案 2 :(得分:13)

使用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>

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

答案 3 :(得分:3)

自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