最近,我开始从我的几个项目中收集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用作元数据.
它使您免于管理输出位置,依赖项,版本以及可从项目派生的其他内容.
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的答案.:)
对于 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
和范围语法。
| 归档时间: |
|
| 查看次数: |
23549 次 |
| 最近记录: |