MSBuild和<AutoUnifyAssemblyReferences />

Rus*_*nov 5 c# msbuild

"Microsoft.Bcl.Build.targets"包含此块:

    <!-- 
  Workaround MSBuild issue that prevents System.Runtime 2.5 and System.Threading.Tasks 2.5 from
  satisfying indirect dependencies on System.Runtime 1.5 and System.Threading.Tasks 1.5 respectively.  
-->
<AutoUnifyAssemblyReferences>false</AutoUnifyAssemblyReferences>
Run Code Online (Sandbox Code Playgroud)

实际上"AutoUnifyAssemblyReferences"有什么作用?

Chr*_*n.K 8

它直接映射到-TaskAutoUnify参数.ResolveAssemblyReferencs

摘自文档:

此参数用于构建程序集,例如DLL,它们不能具有正常的App.Config文件.

如果为true,则会自动将生成的依赖关系图视为传入AppConfigFile参数的anApp.Config文件.此虚拟App.Config文件为每个冲突的程序集集合都有一个bindingRedirect条目,以便选择最高版本的程序集.这样做的结果是永远不会有关于冲突组件的警告,因为每个冲突都将得到解决.

如果为true,则每次不同的重新映射都将生成一个高优先级注释,显示旧版本和新版本,并且AutoUnify为true.

如果为true,则AppConfigFile参数必须为空

如果为false,则不会自动进行装配版本重新映射.当存在两个版本的装配时,将发出警告.

如果为false,则同一程序集的不同版本之间的每个不同冲突都会产生高优先级注释.这些注释后跟一个警告.警告具有唯一的错误代码,并包含"发现不同版本引用之间的冲突"的文本和依赖集会".

突出显示的句子似乎解释了Microsoft.Bcl.Build.Targets你所引用的评论.

(此参数也会影响不常见的MSB3247警告.)

因此,默认值AutoUnifyAssemblyReferences设置false为某些类型的"exe"程序集和true其他程序集类型(%Windir%\Microsoft.NET\Framework64\v4.0*\Microsoft.Common.Targets有关详细信息,请参阅参考资料).