创建多个Nuspec文件

4
我目前正在尝试为此解决方案中的所有项目发布一系列NuGet包。这些项目按照简单的树形结构设置,以Myre作为基础项目,其他项目则依赖于它。
Myre <- Myre.Debugging <- Myre.Debugging.UI <- Myre.UI
Myre <- Myre.UI
Myre <- Myre.Entities <- Myre.Graphics

我正在尝试将每个单独的项目打包为一个NuGet包,并根据需要正确依赖其他Myre子项目包。
我的第一步是制作Myre的一个包(nuspecbat文件进程)。这似乎很好地工作,画廊显示Myre具有ninject(另一个NuGet包)依赖项,一切正常。
当我尝试制作下一个软件包时出现问题。Myre.Debugging 仅依赖于 Myre(使用普通项目引用),没有其他依赖项。使用 this nuspec 和 nuget pack (verbose) 命令会产生以下结果:
Attempting to build package from '(x86) Myre.Debugging.csproj'.
Packing files from 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release'.
Add file 'C:\Long_Path\Myre\Myre.Debugging\bin\x86\Release\Myre.Debugging.dll' to package as 'lib\net40-Client\Myre.Debugging.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.dll' to package as 'lib\net40-Client\Myre.dll'
Add file 'C:\Long_Path\Myre\Myre\bin\x86\Release\Myre.XML' to package as 'lib\net40-Client\Myre.XML'
Found packages.config. Using packages listed as dependencies

Id: Myre.Debugging
Version: 1.0.0.2
Authors: Microsoft
Description: Description
Dependencies: Ninject (= 3.0.1.10)

Added file 'lib\net40-Client\Myre.Debugging.dll'.
Added file 'lib\net40-Client\Myre.dll'.
Added file 'lib\net40-Client\Myre.XML'.

Successfully created package 'C:\Long_Path\Myre\Myre.Debugging\Myre.Debugging.1.0.0.2.nupkg'.

正如您所看到的,它会获取一个packages.config文件(可能来自Myre,因为这里没有here),然后确定一个Ninject依赖关系。如果我想让Myre.Debugging和Myre成为一个单独的包,那就没问题了。但这不是我想要的,我希望Myre.Debugging在Myre包上拾取依赖。

我该如何设置NuGet来使用Myre作为包引用,而不仅仅是将Myre程序集复制到Myre.Debugging包中?

编辑::我尝试不使用-IncludeReferencedProjects并指定:

<dependencies>
  <dependency id="Myre" version="1.0.0.1" />
</dependencies>

但出于某种原因,这只是创建了一个没有任何依赖项的包!即使手动指定依赖关系也能起作用,但这几乎不是理想的。


如果有人访问我的NuGet页面并看到很多Myre项目,那是因为我现在手动创建了所有的nuspec文件。但这真的不是一个很好的长期解决方案! - Martin
1个回答

2
根据NuGet命令行参考-Pack命令IncludeReferencedProjects开关的工作方式如下:

将所引用的项目包含为依赖项或包的一部分。如果一个被引用的项目有一个与该项目同名的nuspec文件,那么该被引用的项目将作为依赖项添加。否则,被引用的项目将作为包的一部分添加。

在您的情况下, Myre.Debugging.nuspec与项目文件名不匹配:(x86) Myre.Debugging.csproj等。我怀疑您需要匹配这些文件名才能使该命令行选项起作用。
或者,如果您想要在nuspec文件中使用元素来使其工作,您可能会遇到另一种名称不匹配问题的变体。您的Myre.nuspec文件将其ID定义如下: $id$ NuSpec参考文档表示,$id$令牌将被“程序集名称”替换。如果它指的是DLL的名称(忽略扩展名),那么我认为生成的ID将是(x86) Myre等。您可以尝试暂时硬编码ID,以查看是否解决了该问题。
我还没有尝试过这些建议的更改,也无法保证它们能够起作用,但我希望这能指引您朝着正确的方向前进。祝你好运!

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