7

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

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

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

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

包括完整的堆栈跟踪:

[TypeLoadException:无法从程序集“mscorlib,版本=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”加载类型“System.Runtime.CompilerServices.ExtensionAttribute”。]
System.ModuleHandle.ResolveType(RuntimeModule 模块,Int32 typeToken,IntPtr * typeInstArgs,Int32 typeInstCount,IntPtr* methodInstArgs,Int32 methodInstCount,ObjectHandleOnStack 类型)+0
System.ModuleHandle.ResolveTypeHandleInternal(RuntimeModule 模块,Int32 typeToken,RuntimeTypeHandle[] typeInstantiationContext,RuntimeTypeHandle[] methodInstantiationContext)+180
System.Reflection.RuntimeModule 。 Int32 metadataToken, Type[] genericTypeArguments, Type[] genericMethodArguments) +192
System.Reflection.CustomAttribute.FilterCustomAttributeRecord(CustomAttributeRecord caRecord,MetadataImport 范围,Assembly& lastAptcaOkAssembly,RuntimeModule decoratedModule,MetadataToken decoratedToken,RuntimeType attributeFilterType,Boolean mustBeInheritable,Object[] 属性,IListderivedAttributes,RuntimeType& attributeType,IRuntimeMethodInfo&ctor,Boolean&ctorHasParameters,Boolean& isVarArg) + 115
System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeModule decoratedModule,Int32 decoratedMetadataToken,Int32 pcaCount,RuntimeType attributeFilterType,布尔 mustBeInheritable,IList derivedAttributes,布尔 isDecoratedTargetSecurityTransparent)+426 System.Reflection.CustomAttribute.GetCustomAttributes(RuntimeAssembly 程序集,运行时类型 caType) +103
System.Reflection.RuntimeAssembly.GetCustomAttributes(Type attributeType, Boolean inherit) +64
WebActivator.AssemblyExtensions.GetActivationAttributes(Assembly assembly) +64 WebActivator.ActivationManager.RunActivationMethods() +143 WebActivator.ActivationManager.Run() +22

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

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

4

3 回答 3

1

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

于 2012-09-18T03:34:07.573 回答
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 程序集引用:如果在目标 4.5 之后将 ASP.NET MVC 4 项目更改为目标 4.0,对 EntityFramework 程序集的引用仍将指向 4.5 版本. 要解决此问题,请卸载并重新安装 EntityFramework NuGet 包。

于 2012-09-11T07:22:27.420 回答
0

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

这些通常是这样的:

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

有关更多详细信息,请参阅Marc 的博客文章

于 2013-02-25T22:48:53.893 回答