2011-09-20 134 views
1

我为我们公司使用的库创建了nuget包。该库使用Fluent NHibernate 1.3.0.717和Structure Map 2.6.2。安装自创的Nuget包强制使用最新版本的依赖关系,

因为一些人使用StructureMap 2.6.3,我创建的软件包的依赖关系:

<dependencies> 
    <dependency id="FluentNHibernate" version="[1.3,)" /> 
    <dependency id="structuremap" version="[2.6.2,)" /> 
</dependencies> 

而当包的NuGet显示了它说,结构图> = 2.6.2要求。到现在为止还挺好。

问题出在这里: 当我将这个库添加到我的项目中时,它总是安装Structure Map 2.6.3。它甚至会从我的项目中卸载2.6.2,以便这样做。

我没有看到结构图2.6.3是FluentNHibernate(或其任何依赖关系)的依赖关系,所以我完全困惑于为什么它不会简单地将我的库添加到FluentNHibernate依赖关系中并离开我的StructureMap 2.6.2。

我不知道这与它有什么关系,但我们将这些软件包放在UNC共享上。

+0

试着用'2.6.2';请参阅http://docs.nuget.org/docs/reference/version-range-specification –

+0

不幸的是,这并不真正奏效。这个库的一些消费者正在使用2.6.3。 **他们**没有问题地工作,只有我使用与存在问题的库相同的结构图版本。 –

回答

1

阅读David Ebbo的blog series关于NuGet版本控制和依赖关系解析。

总之,我们总是选择最低的主要和次要以及最高的构建和修订号(基于依赖关系的约束)的依赖关系。这样可以在使用包作为依赖时自动获取错误修复(不会中断)。

+0

我不必喜欢它,但很好理解,一切都按预期行事。谢谢。 –

+0

Btw 1.3 == [1.3,)所以你不需要[版本,)它是隐含的。 – davidfowl

+0

如果应该选择版本号最高的版本,那么它会被破坏。案例和观点:安装MvcSiteMapProvider.MVC4。安装的MvcSiteMapProvider.Web版本始终是最早的补丁程序。它在nuspec文件中指定为4.6.0,但即使4.6.18可用,它也会在新项目上安装4.6.1。 – NightOwl888

相关问题