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 包时,我还会得到 Autofac
和Autofac.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
的依赖性(在撰写本文时)。我有两个问题:
- 看起来 NuGet 似乎首先通过安装
Autofac 2.6.1.841
来满足 Autofac.Extras.NLog
Autofac 依赖性。当谈到实现我的项目的 Autofac 依赖时,它看到 Autofac 已经安装,因此什么都不做。 如何使 NuGet 将 Autofac 依赖项解析为版本 3.5.2
?
- 即使 NuGet 正在解析 'wrong' NuGet 依赖项(至少对我而言如此),为什么它解析为
2.6.1.841
而不是 2.2.4.900
,这是指定的最低版本在 Autofac.Extras.NLog
依赖项中?
您可以通过在一对方括号中指定版本号来限制要引用的工件版本。请在下面找到示例
<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 没有正确计算它们)。
这是拉取请求:
https://github.com/NuGet/NuGet.Client/pull/632/files
我已经为我的 .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 包时,我还会得到 Autofac
和Autofac.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
的依赖性(在撰写本文时)。我有两个问题:
- 看起来 NuGet 似乎首先通过安装
Autofac 2.6.1.841
来满足Autofac.Extras.NLog
Autofac 依赖性。当谈到实现我的项目的 Autofac 依赖时,它看到 Autofac 已经安装,因此什么都不做。 如何使 NuGet 将 Autofac 依赖项解析为版本3.5.2
? - 即使 NuGet 正在解析 'wrong' NuGet 依赖项(至少对我而言如此),为什么它解析为
2.6.1.841
而不是2.2.4.900
,这是指定的最低版本在Autofac.Extras.NLog
依赖项中?
您可以通过在一对方括号中指定版本号来限制要引用的工件版本。请在下面找到示例
<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 没有正确计算它们)。
这是拉取请求: https://github.com/NuGet/NuGet.Client/pull/632/files