在观看了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
答案 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