指定 Octopack nuget 包文件的目标路径

Posted

技术标签:

【中文标题】指定 Octopack nuget 包文件的目标路径【英文标题】:Specify Octopack nuget package file's target path 【发布时间】:2016-03-25 17:14:24 【问题描述】:

我发现 OctoPack 在创建 .nupkg nuget 包文件时非常简单,但是我希望包含 .nuspec 文件(当前放置在另一个文件夹中,例如 obj/octopackage 或其他东西),以及所有dll 应放置在 lib/net452 folder 内,以便一般结构如下所示:

目前应该在 lib/net452 文件夹中的所有内容,连同 _relspackage,都简单地放在根目录下,并且如前所述,.nuspec 文件丢失了。

要么文档有点稀疏,要么我完全错过了如何在我的调试心理阴霾中做到这一点。任何人都知道如何指定 OctoPack,具体来说,将编译后的输出放在 .nupkg 文件中?

【问题讨论】:

【参考方案1】:

要创建 NuGet 包,您应该使用 nuget.exe,而不是 OctoPack。我会在一分钟内解释原因。

.nuspec 文件用作 NuGet 包 (.nupkg) 的“蓝图”。因此,简短的回答是使用<files> 元素的target 属性简单地指定.nuspec 文件中的位置。可以在NuGet site 上找到详细信息,但它看起来像这样:

<files>
  <file src="bin\$configuration$\*.dll" target="lib\net452\" />
</files>

有多种方法可以在构建后步骤中调用 nuget.exe; NuGet 网站上也有很多解释。

OctoPack 并不是为 nuget.org 创建包;它是专门为 Octopus Deploy 创建包而设计的。它通过以下两种方式之一创建包:

    如果存在web.config 文件,OctoPack 假定该项目是一个 Web 项目,并相应地打包输出。它使用项目文件来确定哪些项目被标记为内容,哪些不是(尽管它总是会抓取 web.config 转换文件)。 否则,OctoPack 假定项目是可执行文件或组件,并简单地打包在输出文件夹中找到的任何内容(通常为\Debug\bin\Release\bin)。这就是您所看到的行为。

由于 OctoPack 在后台使用 nuget.exe.nuspec 文件将覆盖上述两种情况。因此,虽然您可以使用 OctoPack 创建 NuGet 包,但使用 nuget.exe 更合适。

【讨论】:

以上是关于指定 Octopack nuget 包文件的目标路径的主要内容,如果未能解决你的问题,请参考以下文章

Nuget 3 - Octopack - 错误的框架目标错误

运行 OctoPack 以创建包含 DEBUG 程序集的 nuget 包

显式设置 NuGet 包中定义的构建目标的顺序

TFS2017 - 使用 octopack 凭据进行 NuGet 推送

是否可以将 OctoPack 与新的 PackageReference NuGet 格式一起使用?

AppVeyor Octopack - GetAssemblyVersion 失败