我发现 OctoPack 在创建 .nupkg
nuget 包文件时非常简单,但是我想要包含 .nuspec
文件(目前放在另一个obj/octopackage 之类的文件夹),并且所有的 dll 都应该放在 lib/net452 文件夹
中,这样一般的结构就会这样显示:
目前,应该在 lib/net452 文件夹中的所有内容,以及 _rels
和 package
都简单地放在了根目录中,并且作为提到 .nuspec
文件丢失。
要么文档有点稀疏,要么我在调试的头脑中完全忘记了如何执行此操作。任何人都知道如何指定 OctoPack 在哪里,特别是将编译后的输出放在 .nupkg
文件中?
最佳答案
要创建 NuGet 包,您应该使用 nuget.exe,而不是 OctoPack。稍后我会解释原因。
.nuspec
文件充当 NuGet 包 ( .nupkg
) 的“蓝图”。所以简短的回答是简单地在你的 .nuspec
中指定位置。文件,使用 target
<files>
的属性元素。详情可以在 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 更合适。
关于nuget - 指定 Octopack nuget 包文件的目标路径,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36224611/