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

时间:2015-05-22 13:29:42

标签: nuget nuget-package nuget-spec

我为我的.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非常聪明,可以将这些addtional依赖项纳入其中。当我在新项目中安装我的NuGet包时,我也得到了Autofac和{{ 1}}依赖关系,引用并自动插入到我的新项目的packages.config中。

然而......我得到的Autofac版本是错误的。而不是版本Autofac.Extras.NLog我得到版本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(在撰写本文时)。我有两个问题:

  • 看起来NuGet首先通过安装≥ 2.2.4.900来实现Autofac.Extras.NLog Autofac依赖关系。然后,当它实现我的项目的Autofac depdency时,它看到已经安装了Autofac,因此什么也没做。 如何让NuGet将Autofac依赖关系解析为版本Autofac 2.6.1.841
  • 即使NuGet正在解决“错误的”NuGet depdendency(至少在我的目的),为什么它会解析为3.5.2而不是2.6.1.841,这是2.2.4.900中指定的最低版本1}}依赖?

3 个答案:

答案 0 :(得分:0)

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

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

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

答案 1 :(得分:0)

解决方案是将这些依赖项添加到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文件,那么您是否仍需要维护NuSpec文件仍然是一件好事。

答案 2 :(得分:0)

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

Nuget download page

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