由于从属程序集的版本号,从属程序集不复制到输出目录

时间:2011-06-16 02:27:44

标签: c# .net msbuild

在我工作的项目中,我们遇到了一个奇怪的错误。这是由于版本号的一些有趣的操作引起的,因为我们做了一些奇怪的分支。我们已经解决了这个问题,但我很好奇我是否可以获得有关msbuild展示的行为的解释。使用Nant和Visual Studio 2008构建时观察到相同的行为。

设置:程序集的版本号由链接到所有程序集属性的公共文件控制。这样做是为了使它们彼此保持同步。但是,我们有一些预编译的程序集,只是偶尔构建。它们用于序列化,部分由XSD生成。由于序列化通常不会改变,因此通常不需要经常重建。

情况:链接文件中的版本号已更新。发生这种情况后,重新编译预编译的程序集,因为序列化已更改。在这发生之后,决定需要更低版本号。公共链接文件再次更新,但版本号比以前更低。

问题:在最后一次更新版本号后,构建停止将一些dll复制到一个特定项目的输出目录,停止正常工作。我们将调用此项目A.A依赖于程序集B,程序集B依赖于程序集C,程序集C依赖于预编译的dll之一。这似乎是一个长链,但这个链是关键。另一个关键事实是A没有对C的直接引用。在降低版本号C之前构建A时,C被复制到输出目录中。此问题是,在降低版本号后,C不再复制到输出目录中。有三种方法可以纠正这个问题。如果进行了任何这些更改,则会将C正确复制到输出目录。

  • 在A的项目中添加对C的直接引用。
  • 更改版本号或使其高于预编译dll构建时的版本号。
  • 使用版本号更新重建预构建的程序集。

第三个选项是如何解决问题。我的问题是这是msbuild的错误还是预期的行为?这种行为的目的是什么?为什么不将副本复制到输出目录而不是创建错误?

2 个答案:

答案 0 :(得分:0)

使用较低版本生成较新的程序集可能会有问题。当你需要再制作一个新的时候会发生什么?

基本上如果你制作新版本的东西,增加版本号;你在第二个解决方案中发现了问题。

答案 1 :(得分:0)

回答您的问题 - 打算使用较低或相同版本号的文件不会覆盖其他文件