我目前正在尝试为this solution中的所有项目发布一堆nuget包。项目设置在一个简单的树中,Myre是基础项目,一切都取决于它:
Myre <- Myre.Debugging <- Myre.Debugging.UI <- Myre.UI
Myre <- Myre.UI
Myre <- Myre.Entities <- Myre.Graphics
我正在尝试将每个单独的项目打包为nuget包,并在必要时对其他Myre子项目包进行正确的依赖。
我的第一步是为Myre(nuspec和bat file of process制作一个包。这似乎很好用,画廊显示Myre有一个 ninject (另一个nuget包)依赖,一切都很好。
当我尝试制作下一个包时出现问题。 Myre.Debugging取决于Myre(使用正常的项目引用)而不是其他内容。使用带有nuget pack(verbose)的this nuspec可以得到:
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>
但由于某种原因,这只会创建一个完全没有依赖关系的包!即使手动指定这样的依赖关系确实有效,但这并不理想。
答案 0 :(得分:1)
根据NuGet command line reference for the Pack command,IncludeReferencedProjects
开关的工作方式如下:
将引用的项目包含为依赖项或作为程序包的一部分。如果引用的项目具有与项目具有相同名称的相应nuspec文件,则该引用的项目将作为依赖项添加。否则,引用的项目将作为包的一部分添加。
在您的情况下,Myre.Debugging.nuspec与项目文件名不匹配:(x86) Myre.Debugging.csproj等。我怀疑您需要匹配这些文件名才能使该命令行选项生效。
或者,如果您希望使用nuspec文件中的<dependencies>
元素,则可能会遇到名称不匹配问题的另一个变体。您的Myre.nuspec文件按以下方式定义其ID:
&LT; ID&GT; $ ID $&LT; / ID&GT;
NuSpec reference表示$id$
令牌被“大会名称”取代。如果它正在讨论DLL的名称(忽略扩展名),那么我认为生成的ID将是(x86) Myre
等。您可能想要暂时尝试对ID进行硬编码以查看是否可以解决问题
我没有尝试过这些建议的更改,我不能保证它们会起作用,但我希望这能指出你正确的方向。祝你好运!