如何使用dotnet pack为.NET Core创建NuGet包

5

已添加所有依赖项到包中。

我尝试了多种方法,但似乎必须有所改动才能实现。仅添加一个nuspec文件是不够的,因为解析依赖项的方式不同。

举个例子,如果我将一个 .net框架项目与一个nuspec文件一起打包,并在文件中指向构建的相关输出文件夹(例如bin\release),那么我就可以得到所需的一切。

我的用例是在CI流水线中运行一些验收测试(外部进程)。此时,我不想访问源代码控制。

2个回答

8

看一下NuGet.Build.Tasks.Pack

如果您引用了NuGet.Build.Tasks.Pack,则可以使用.nuspec文件打包项目。我已经这样做,将解决方案中的多个项目合并成一个nuget包。

您可以使用dotnet.exe进行打包:

dotnet pack <path to .csproj file> /p:NuspecFile=<path to nuspec file> /p:NuspecProperties=<> /p:NuspecBasePath=<Base path>

或者使用MSBuild:

msbuild /t:pack <path to .csproj file> /p:NuspecFile=<path to nuspec file> /p:NuspecProperties=<> /p:NuspecBasePath=<Base path>

更多细节可在此处找到:https://learn.microsoft.com/en-us/nuget/reference/msbuild-targets#packing-using-a-nuspec


好的,我会试一下。使用dotnet publish(这是我采用的方法,但似乎不太正确),但如果我打包它,它就可以工作,但作为一个步骤会更好。 - brumScouse

0

好的,这并不是一个特别不寻常的用例,但使用 .NET framework nuget 包装没有什么仪式感。

所以我正在部署一个包,其中包含一些测试程序集和所有相关依赖项(程序集和 appsettings 文件),以便 Nunit 控制台运行器成功执行。

我们想出的解决方案是同时使用 DotNetCorePublishOctoPack(作为 nuget 打包的便利方式)。

因此,DotNetCorePublish 在原地协调所有第三方依赖项,并创建一个文件夹(默认情况下命名为 publish),其中包含执行任何测试所需的所有内容(因此我后来了解到这是一个框架相关的部署)。

然后,OctoPack 被配置为指向我们要打包的内容。因此,将其设置为相关文件夹(使用相关通配符/全局通配符)会拉取我们需要的所有内容。在飞行中创建一个 nuspec 文件,用于创建 Nuget 包。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接