NuSpec 生成的 NuGet 文件正在解析错误版本的依赖项 - 我如何才能强制它执行其他操作?

NuSpec-generated NuGet file is resolving the wrong version of a dependency - how can I force it to do otherwise?

我已经为我的 .NET 项目创建了一个 NuSpec 文件,如下所示:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Author</authors>
    <description>My Project</description>
    <owners>Me</owners>
    <dependencies>
    </dependencies>
  </metadata>
</package>

我的项目还有两个 NuGet 提供的依赖项,它们是:

<package id="Autofac" version="3.5.2" targetFramework="net451" />
<package id="Autofac.Extras.NLog" version="1.2.3" targetFramework="net451" />

当我使用此 NuSpec 为我的项目创建 NuGet 包时,NuGet 足够聪明,可以将这些附加依赖项拉入。当我在新项目中安装我的 NuGet 包时,我还会得到 AutofacAutofac.Extras.NLog 依赖项也被引用并自动插入到我的新项目的 packages.config 中。

但是...我得到的Autofac版本是错误的。而不是版本 3.5.2 我得到版本 2.6.1.841:

<package id="Autofac" version="2.6.1.841" targetFramework="net451" />
<package id="Autofac.Extras.NLog" version="1.2.3" targetFramework="net451" />

现在,Autofac.Extras.NLog 具有 ≥ 2.2.4.900 的依赖性(在撰写本文时)。我有两个问题:

您可以通过在一对方括号中指定版本号来限制要引用的工件版本。请在下面找到示例

<package id="Autofac" version="[3.5.2]" targetFramework="lib/net45" />

使用上面的行编辑您的 packages.config 文件,看看是否有效..!!

一个解决方案是将这些依赖项添加到 NuSpec 文件中:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>$id$</id>
    <version>$version$</version>
    <title>$title$</title>
    <authors>Author</authors>
    <description>My Project</description>
    <owners>Me</owners>
    <dependencies>
      <group targetFramework="net451">
        <dependency id="Autofac" version="3.5.2"/> <!-- EXTRA DEPENDENCY -->
      </group>
    </dependencies>
  </metadata>
</package>

如果有解决方案,您不必每次在打包的项目中发生依赖项版本更改时都必须维护 NuSpec 文件,这仍然是一件好事。

看来 Nuget 3.5(现在处于 Beta 阶段)终于解决了这个问题。我在我的项目上进行了测试,并且正确计算了依赖项(Nuget 3.4 没有正确计算它们)。

Nuget download page

这是拉取请求: https://github.com/NuGet/NuGet.Client/pull/632/files