2009-06-30 75 views
37

我们是两家公司在同一个应用程序中从事同一个项目。在每周的基础上,我们只交换我们的程序集(而不是代码)并引用对方的dll。.net引用特定版本真或假?

在添加对我们项目的引用时,关于specificversion的最佳做法是什么? 具体而言,我们时应使用true一个specificversion值和在什么情况下,我们应该用false

+0

通常,引用精确版本的依赖关系很好,可以防止[软件腐烂](https://blog.heroku.com/archives/2011/6/28/the_new_heroku_4_erosion_resistance_explicit_contracts)。这就是为什么Ruby具有`Gemfile.lock`,Python`requirements.txt`和Nodejs`npm-shrinkwrap.json`的原因。 – 2014-12-02 15:39:22

+0

另请参见http://stackoverflow.com/a/24022135/284795“要了解的最重要的一点是SpecificVersion是一个在编译时生效但不是在运行时生效的属性。” – 2015-05-11 10:16:33

回答

47

这个答案将基于你正在版本化你的dll的假设。

如果您将SpecificVersion设置为true(这是添加引用时的默认值),那么项目将使用特定版本(例如1.0.0.0)引用该dll。如果在以后的时间,你得到一个新的dll(比如1.0.1.0),那么你将不得不删除旧的dll引用并添加新的引用。这是因为当你有一个新的版本1.0.1.0时,该项目特别寻找1.0.0.0。

另一种方法是将SpecificVersion设置为false,它告诉项目找到最新的可用dll并使用该版本。与此问题是,该项目现在需要在各个地方“寻找”你所引用的dll,这可以增加你的编译时间。即使它知道你所引用的dll的路径,它也会这样做。我不确定这是否是一个错误,或者这是否由设计完成。它可能会检查除了您所引用的那个之外是否还有更新的dll(可能在GAC或其他地方)。

这是article,更详细地描述此问题。