将MVC4站点部署到Azure会导致ExtensionAttribute异常

时间:2012-07-20 01:08:01

标签: c# asp.net-mvc visual-studio azure

在观看了AspConf的Scott Gu的主题演讲后,我对使用MVC4尝试Windows Azure网站感到很兴奋。我尝试在将其重新配置为目标.NET framework 4.0而不是4.5后部署现有的MVC应用程序,并出现以下错误。

  

无法加载类型   程序集中的“System.Runtime.CompilerServices.ExtensionAttribute”   'mscorlib,版本= 4.0.0.0,文化=中性,   公钥= b77a5c561934e089' 。

由于我已经添加了几个NuGet包,我认为它可能与Ninject有关,所以我创建了一个新的MVC项目,目标是.NET 4.0框架,没有NuGet包,并使用Visual Studio 2012 RC发布部署到Windows Azure选项(右键单击Web项目),我仍然收到此错误。

有谁知道发生了什么或如何解决这个问题?提前谢谢。

包括完整堆栈跟踪:

  

[TypeLoadException:无法加载类型   程序集中的“System.Runtime.CompilerServices.ExtensionAttribute”   'mscorlib,版本= 4.0.0.0,文化=中性,   公钥= b77a5c561934e089' 。]
  System.ModuleHandle.ResolveType(RuntimeModule模块,Int32 typeToken,   IntPtr * typeInstArgs,Int32 typeInstCount,IntPtr * methodInstArgs,   Int32 methodInstCount,ObjectHandleOnStack type)+0
  System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule模块,   Int32 typeToken,RuntimeTypeHandle [] typeInstantiationContext,   RuntimeTypeHandle [] methodInstantiationContext)+180
  System.Reflection.RuntimeModule.ResolveType(Int32 metadataToken,   键入[] genericTypeArguments,Type [] genericMethodArguments)+192
  System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord   caRecord,MetadataImport范围,汇编& lastAptcaOkAssembly,   RuntimeModule decoratedModule,MetadataToken decoratedToken,   RuntimeType attributeFilterType,Boolean mustBeInheritable,Object []   属性,IList derivedAttributes,RuntimeType&属性类型,   IRuntimeMethodInfo&安培; ctor,布尔& ctorHasParameters,Boolean&   isVarArg)+115
  System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule   decoratedModule,Int32 decoratedMetadataToken,Int32 pcaCount,   RuntimeType attributeFilterType,Boolean mustBeInheritable,IList   derivedAttributes,Boolean isDecoratedTargetSecurityTransparent)+426   System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly   assembly,RuntimeType caType)+103
  System.Reflection.RuntimeAssembly.GetCustomAttributes(类型   attributeType,布尔继承)+64
  WebActivator.AssemblyExtensions.GetActivationAttributes(大会   程序集)+64 WebActivator.ActivationManager.RunActivationMethods()   +143 WebActivator.ActivationManager.Run()+22

     

[InvalidOperationException:预应用程序启动初始化   方法在WebActivator.ActivationManager类型上运行引发异常   带有以下错误消息:无法加载类型   程序集中的“System.Runtime.CompilerServices.ExtensionAttribute”   'mscorlib,版本= 4.0.0.0,文化=中性,   公钥= b77a5c561934e089' ..]
  System.Web.Compilation.BuildManager.InvokePreStartInitMethods(ICollection`1   方法)+423
  System.Web.Compilation.BuildManager.CallPreStartInitMethods()+ 306 6   System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager   appManager,IApplicationHost appHost,IConfigMapPathFactory   configMapPathFactory,HostingEnvironmentParameters hostingParameters,   PolicyLevel policyLevel,Exception appDomainCreationException)+677

     

[HttpException(0x80004005):预应用程序启动初始化   方法在WebActivator.ActivationManager类型上运行引发异常   带有以下错误消息:无法加载类型   程序集中的“System.Runtime.CompilerServices.ExtensionAttribute”   'mscorlib,版本= 4.0.0.0,文化=中性,   公钥= b77a5c561934e089' ..]
  System.Web.HttpRuntime.FirstRequestInit(HttpContext context)+9090044   System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context)+97   System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest   wr,HttpContext context)+256

3 个答案:

答案 0 :(得分:1)

如果选择“设置”|,则在“发布Web应用程序”向导中删除目的地的其他文件,这个问题就消失了。

答案 1 :(得分:0)

在我看来,这似乎是.NET FX引用的一个问题。

根据ASP.NET MVC 4发行说明,Entity Framework nuget包和从.NET 4.5降级的问题 - > .NET 4。 http://www.asp.net/whitepapers/mvc4-release-notes#_Toc303253815

  

将ASP.NET MVC 4项目从4.5更改为目标4.0不会   更新EntityFramework程序集引用:如果更改了   ASP.NET MVC 4项目以4.5为目标后引用目标4.0   到EntityFramework程序集仍将指向4.5版本。   要解决此问题,请卸载并重新安装EntityFramework NuGet   封装

答案 2 :(得分:0)

另一个可能的解决方案(其他具有相同例外)可能是您的构建服务器没有.net 4.0引用程序集,在安装.net 4.5之后,您需要从开发框中复制它们。

这些通常是:

C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0

有关详细信息,请参阅Marc's blog post