如果检测到任何程序集冲突,我试图强制构建失败。
默认的MSBuild脚本运行一个名为ResolveAssemblyReference的任务来查找所有依赖项并尝试解决任何冲突。但是,它将支持主要引用和更高版本的程序集,并且根据ResolveAssemblyReference任务中的各种规则,它将选择更高版本的程序集,或者更糟糕的是,任意选择冲突获胜者。
这种方法存在问题;在某些情况下,构建将愉快地传递,但在运行时失败。 例如
App-> Assemby1-> Assembly3 V1
App-> Assembly2-> Assembly3 V1.1
在某些情况下,根据ResolveAssemblyReference中的强名称和规则,可能会选择Assembly3V1作为冲突获胜者,因此如果Assembly2依赖于Assembly3的1.1版中的新方法或类,则可以生成运行时错误。 (有很多变化也会导致成功构建和运行时失败)
我们正在远离项目引用并开始使用NuGet进行内部组件管理,因此,这个问题对我们来说是一个更大的问题。我想修改我们的默认MSBuild脚本,以便在检测到任何冲突时使构建失败(能够覆盖/忽略审查的冲突)。
问题在于,虽然ResolveAssemblyReference任务完成了识别冲突的全面工作,但只有当丢失冲突的引用是主要引用时,它才会在特定情况下生成警告。对于所有其他冲突,它只是将消息记录到构建输出。
如果检测到冲突,我正在寻找一种生成警告或错误的方法,因此构建将失败。
想法?