在我工作的项目中,我们遇到了一个奇怪的错误。这是由于版本号的一些有趣的操作引起的,因为我们做了一些奇怪的分支。我们已经解决了这个问题,但我很好奇我是否可以获得有关msbuild展示的行为的解释。使用Nant和Visual Studio 2008构建时观察到相同的行为。
设置:程序集的版本号由链接到所有程序集属性的公共文件控制。这样做是为了使它们彼此保持同步。但是,我们有一些预编译的程序集,只是偶尔构建。它们用于序列化,部分由XSD生成。由于序列化通常不会改变,因此通常不需要经常重建。
情况:链接文件中的版本号已更新。发生这种情况后,重新编译预编译的程序集,因为序列化已更改。在这发生之后,决定需要更低版本号。公共链接文件再次更新,但版本号比以前更低。
问题:在最后一次更新版本号后,构建停止将一些dll复制到一个特定项目的输出目录,停止正常工作。我们将调用此项目A.A依赖于程序集B,程序集B依赖于程序集C,程序集C依赖于预编译的dll之一。这似乎是一个长链,但这个链是关键。另一个关键事实是A没有对C的直接引用。在降低版本号C之前构建A时,C被复制到输出目录中。此问题是,在降低版本号后,C不再复制到输出目录中。有三种方法可以纠正这个问题。如果进行了任何这些更改,则会将C正确复制到输出目录。
第三个选项是如何解决问题。我的问题是这是msbuild的错误还是预期的行为?这种行为的目的是什么?为什么不将副本复制到输出目录而不是创建错误?
答案 0 :(得分:0)
使用较低版本生成较新的程序集可能会有问题。当你需要再制作一个新的时候会发生什么?
基本上如果你制作新版本的东西,增加版本号;你在第二个解决方案中发现了问题。
答案 1 :(得分:0)
回答您的问题 - 打算使用较低或相同版本号的文件不会覆盖其他文件