当我在TFS Build 2012下构建Web项目(ASP.NET MVC4)时,出现了MSBuild警告“MSB3247:在同一相关程序集的不同版本之间发现冲突。”。
考虑使用app.config重定向程序集“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]以解决冲突并消除警告。
考虑使用app.config重定向程序集“WebGrease,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”从版本“1.3.0.0” []到版本“1.5.2.14234” [XXXX \ packages \ WebGrease.1.5.2 \ lib \ WebGrease.dll]以解决冲突并消除警告。
考虑使用app.config重定向程序集“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文件中的绑定重定向:
考虑使用app.config重定向程序集“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]以解决冲突并消除警告。
考虑使用app.config重定向程序集“WebGrease,Culture = neutral,PublicKeyToken = 31bf3856ad364e35”从版本“1.3.0.0” []到版本“1.5.2.14234” [XXXX \ packages \ WebGrease.1.5.2 \ lib \ WebGrease.dll]以解决冲突并消除警告。
考虑使用app.config重定向程序集“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>
这个警告是在本地开发者版中出现的,但不是每次都出现。
有趣的是,如果我向web项目添加一个app.config
文件,并将程序集重定向放在那里(仍然保持在web.config
文件中的原始重定向),那么警告就会消失,无论是在本地还是TFS Build中(在这里它经常出现)。
什么鬼?你有什么想法吗?