aspnet_compiler发现System.Web.WebPages 1.0.0.0的错误版本,而不是2.0.0.0

我有一个ASP.NET MVC4项目在VS2010编译罚款。 为了部署的目的,我运行一个Nant脚本,尝试使用aspnet_compiler.exe预编译网站,但是我一直运行到与System.Web.WebPage的程序集引用问题

CS1705:Assembly'System.Web.Mvc,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'使用'System.Web.WebPages,Version = 2.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35',它有一个更高版本比引用程序集'System.Web.WebPages,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = 31bf3856ad364e35'

我的web.config中也有下面的程序集绑定:

<runtime> <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> <dependentAssembly> <assemblyIdentity name="System.Web.Helpers" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="1.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <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="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> <dependentAssembly> <assemblyIdentity name="System.Web.WebPages.Razor" publicKeyToken="31bf3856ad364e35" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> </assemblyBinding> </runtime> 

和我的csproj有以下参考:

 <Reference Include="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"> <Private>True</Private> <HintPath>..\packages\AspNetWebPages.Core.2.0.20126.16343\lib\net40\System.Web.WebPages.dll</HintPath> </Reference> 

我通过在Web.config中明确引用2.0程序集来解决此问题。 我想,出于某种原因,ASP.NET编译器(在我的情况下,当运行MvcBuildViews ),使用旧的1.0程序集,如果它被发现。

 <?xml version="1.0" encoding="utf-8"?> <configuration> <!-- … --> <system.web> <!-- … --> <compilation debug="true" targetFramework="4.0"> <assemblies> <add assembly="System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> <add assembly="System.Web.Abstractions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.Routing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> <add assembly="System.Web.WebPages, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35, processorArchitecture=MSIL" /> </assemblies> </compilation> <!-- … --> </system.web> <!-- … --> </configuration> 

顺便说一句:看起来像这个问题发生在我第一次添加第三方ASP.NET MVC 3.0组件后。 该组件可以通过程序集绑定正常工作,但也可能是ASP.NET编译器首先尝试加载1.0网页的原因。

我们有类似的问题。

我们现在正在使用Visual Studio 2012进行开发,当我们将2010项目转换为2012并试图部署时,ASP.NET需要2.0.0.0而不是1.0.0.0。

经过一番调查,我看到这个项目没有引用System.Web.WebPages的特定版本,所以在升级到VS 2012之后,它find了2.0.0.0版本。

如果从项目中删除引用,然后从GAC中重新添加特定版本,则可以正常工作。

对于我们来说,问题是_bin_deployableAssemblies文件夹中相关DLL的旧副本。 删除这让我们正确configuration2.0版本。

MvcBuildViews设置为true时,我也会发生这个错误。

我注意到,使用“构build解决scheme”构build整个解决scheme时,我总会遇到这个错误。 在这一点上,如果我立即自己构buildMVC项目(右键单击项目然后Build),MVC项目将成功构build。

似乎只要MVC项目不依靠其依赖的项目(即它们是最新的)来构buildMVC项目,它就会成功。 但使用“构build解决scheme”构build总是失败,这个错误。

将站点从MVC 3升级到5.2.3.0时遇到此问题。

我的问题是TFS不从Nuget安装添加包和关联的DLL。

我手动添加解决scheme的包文件夹中的以下文件夹。

Microsoft.AspNet.Razor.3.2.3
Microsoft.AspNet.WebPages.3.2.3

Microsoft.Web.Infrastructure.1.0.0.0

一旦build立,构build服务器不再有问题。

对我来说,这是一个引用System.Web.WebPages.Administration v1.0.0.0谁是罪魁祸首。 一旦删除,所有工作没有任何Web.config的调整。

当我拿到它的时候,我就把这个问题搔了一下。 最终我注意到我在web.config的“运行时”部分有以下部分。

 <runtime> . . . <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-2.0.0.0" newVersion="2.0.0.0" /> </dependentAssembly> . . . </runtime> 

正如您所看到的,这指的是程序集的版本2,它与web.config的system.web / compilation / assemblies部分中的以下代码不匹配。

 <add assembly="System.Web.WebPages, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" /> 

项目引用中引用的实际程序集确实是v1.0.0.0,因此我将上面的第一部分代码更改为以下代码,这会立即解决问题。 我不确定这个错误是如何到达的。

 <runtime> . . . <dependentAssembly> <assemblyIdentity name="System.Web.WebPages" publicKeyToken="31bf3856ad364e35" culture="neutral" /> <bindingRedirect oldVersion="0.0.0.0-1.0.0.0" newVersion="1.0.0.0" /> </dependentAssembly> . . . </runtime> 

在这种情况下,值得在解决scheme根文件夹中的所有文件中执行“在文件中查找”

对于上面的例子,我已经search: System.Web.WebPages, Version=1.0.0.0

通过这种方式,您可以摆脱对旧版本的所有引用。

对我来说,这个问题最有可能导致通过Web Platform安装程序购买升级到最新版本的.NET,但是我没有安装最新版本的ASP.NET MVC。 更新这个通过Web平台安装程序解决了这些问题。

只要去引用和searchSystem.Web.Mvc版本4.0或更多,并添加它。 我只是添加一个System.web.mvc 4.0.0.1的引用,它的工作原理。

不要忘记删除旧的mvc版本。

删除和重新添加引用System.Web.Mvc做了我的工作