无法构建程序集引用冲突

时间:2013-10-15 22:57:32

标签: .net msbuild

如果检测到任何程序集冲突,我试图强制构建失败。

默认的MSBuild脚本运行一个名为ResolveAssemblyReference的任务来查找所有依赖项并尝试解决任何冲突。但是,它将支持主要引用和更高版本的程序集,并且根据ResolveAssemblyReference任务中的各种规则,它将选择更高版本的程序集,或者更糟糕的是,任意选择冲突获胜者。

这种方法存在问题;在某些情况下,构建将愉快地传递,但在运行时失败。 例如

App-> Assemby1-> Assembly3 V1

App-> Assembly2-> Assembly3 V1.1

在某些情况下,根据ResolveAssemblyReference中的强名称和规则,可能会选择Assembly3V1作为冲突获胜者,因此如果Assembly2依赖于Assembly3的1.1版中的新方法或类,则可以生成运行时错误。 (有很多变化也会导致成功构建和运行时失败)

我们正在远离项目引用并开始使用NuGet进行内部组件管理,因此,这个问题对我们来说是一个更大的问题。我想修改我们的默认MSBuild脚本,以便在检测到任何冲突时使构建失败(能够覆盖/忽略审查的冲突)。

问题在于,虽然ResolveAssemblyReference任务完成了识别冲突的全面工作,但只有当丢失冲突的引用是主要引用时,它才会在特定情况下生成警告。对于所有其他冲突,它只是将消息记录到构建输出。

如果检测到冲突,我正在寻找一种生成警告或错误的方法,因此构建将失败。

想法?

0 个答案:

没有答案