【问题标题】:Creating Multiple Nuspec files创建多个 Nuspec 文件
【发布时间】:2013-11-20 10:42:49
【问题描述】:

我目前正在尝试为this solution 中的所有项目发布大量 nuget 包。这些项目设置在一个简单的树中,Myre 是基础项目,一切都依赖于它:

Myre <- Myre.Debugging <- Myre.Debugging.UI <- Myre.UI
Myre <- Myre.UI
Myre <- Myre.Entities <- Myre.Graphics

我正在尝试将每个单独的项目打包为一个 nuget 包,并根据需要对其他 Myre 子项目包具有正确的依赖关系。

我的第一步是为Myrenuspecbat file of process)制作一个包。这似乎工作得很好,图库显示 Myre 具有 ninject(另一个 nuget 包)依赖项,一切都很好。

当我尝试制作下一个包时,问题就来了。 Myre.Debugging 取决于 Myre(带有正常的项目参考),仅此而已。将 this nuspec 与 nuget pack 一起使用(详细)给出:

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 文件。但这真的不是一个很好的长期解决方案!

标签: deployment nuget nuspec


【解决方案1】:

根据NuGet command line reference for the Pack commandIncludeReferencedProjects开关工作如下:

将引用的项目作为依赖项或作为包的一部分包含在内。如果引用的项目具有与该项目同名的相应 nuspec 文件,则将该引用的项目添加为依赖项。否则,引用的项目将作为包的一部分添加。

在您的情况下,Myre.Debugging.nuspec 与项目文件名不匹配:(x86) Myre.Debugging.csproj 等。我怀疑您需要匹配这些文件名才能使该命令行选项起作用。

或者,如果您想让它与 nuspec 文件中的 &lt;dependencies&gt; 元素一起使用,您可能会面临名称不匹配问题的另一个变体。您的 Myre.nuspec 文件将其 ID 定义如下:

$id$

NuSpec reference 表示 $id$ 标记已替换为“程序集名称”。如果它谈论的是 DLL 的名称(忽略扩展名),那么我认为生成的 ID 将是 (x86) Myre 等。您可能想暂时尝试对 ID 进行硬编码,看看是否能解决问题。

我没有尝试进行这些建议的更改,我不能保证它们会起作用,但我希望这会为您指明正确的方向。祝你好运!

【讨论】:

    猜你喜欢
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    • 1970-01-01
    • 1970-01-01
    • 2015-03-14
    相关资源
    最近更新 更多