我收到 MS Build 警告“MSB3247:发现同一依赖程序集的不同版本之间存在冲突”。在 TFS Build 2012 下构建 Web 项目(ASP.NET MVC4)时。
考虑将程序集 "System.Web.Mvc, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 从版本 "2.0.0.0" [] 重新映射到版本 "4.0.0.0" [XXXX\packages\Microsoft.AspNet.Mvc.4.0 .30506.0\lib\net40\System.Web.Mvc.dll] 解决冲突并消除警告。
考虑将程序集 "WebGrease, Culture=neutral, PublicKeyToken=31bf3856ad364e35" 从版本 "1.3.0.0" [] 重新映射到版本 "1.5.2.14234" [XXXX\packages\WebGrease.1.5.2\lib\WebGrease.dll ] 解决冲突并摆脱警告。
考虑将程序集 "Antlr3.Runtime, Culture=neutral, PublicKeyToken=eb42632606e9261f" 从版本 "3.4.1.9004" [] 重新映射到版本 "3.5.0.2" [XXXX\packages\Antlr.3.5.0.2\lib\Antlr3 .Runtime.dll] 来解决冲突并消除警告。
我知道是哪些引用导致了这些,这不是问题所在。我在web.config
文件中有相关的绑定重定向,其中大部分是在引用相关包时由 NuGet 设置的。
问题是这是一个 Web 项目,就好像 MSBuild 忽略了web.config
文件中的绑定重定向:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Mvc" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-4.0.0.0" newVersion="4.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="WebGrease" publicKeyToken="31bf3856ad364e35" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-1.5.2.14234" newVersion="1.5.2.14234" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Antlr3.Runtime" publicKeyToken="eb42632606e9261f" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-3.5.0.2" newVersion="3.5.0.2" />
</dependentAssembly>
</assemblyBinding>
</runtime>
此警告确实发生在本地开发人员构建中,但并非每次都一致。
有趣的是,如果我将一个app.config
文件添加到 Web 项目并将程序集重定向放在其中(仍然将原始重定向保留在 web.config 文件中),警告就会消失,无论是在本地还是在 TFS Build 中(它始终发生的地方) .)。
怎么回事?有任何想法吗?