nuget-packing csproj与nuspec之间的差异

Mat*_*ias 49 .net c# nuget

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

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

Xav*_*ter 78

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

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

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

  • 是否有可能从assemblyinfo获取版本并拥有一个nuspec?我确实想要nuspec作者和releasenotes位,但似乎我必须处理nuspec中的version标签以及assemblyinfo (3认同)
  • @JohnKorsnes你尝试使用带有预先填充值的nuspec作者和发行说明等,同时保留版本标签的标记化?(<版本> $ $版本</版本>) (3认同)

man*_*lds 17

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

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

您可以指定任何属性,包括licenseUrl使用Properties参数tonuget pack

nuget pack -properties licenseUrl=http://blah
Run Code Online (Sandbox Code Playgroud)


小智 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>
Run Code Online (Sandbox Code Playgroud)

ps因为我没有足够的声誉来发表评论,所以我会留下答案,而不是评论Xavier的答案.:)

  • @Chrono @Stijn当您使用新的csproj格式时(例如以`<Project Sdk ...>`开头),没有必要.您可以将新的csproj格式与.net框架项目一起使用,包括WPF和WinForms项目. (6认同)
  • @Chrono这取决于项目类型,它不是.NET Core和.NET Standard项目所必需的. (3认同)
  • 当您想要从 Visual Studio 编辑“.csproj”文件时,您需要在“编辑 csproj”选项可用之前选择“卸载项目”。 (2认同)

Luk*_*ett 7

对于 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>
Run Code Online (Sandbox Code Playgroud)

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

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

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