18

您好,提前感谢您的帮助,我知道已经发布了这个问题或类似问题,通常与 MVC 3 应用程序有关。但是,每当我尝试使用 .net 4.0 目标框架从 Visual Web Developer Express 2010 中启动任何应用程序时,都会收到此错误消息。

确切的错误信息是:

尝试通过安全透明方法 'System.Runtime.Diagnostics.DiagnosticTrace..ctor(System.String, System.Guid)' 访问安全关键方法 'System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(System.String, System.Guid )'失败'。

程序集 'System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 标记有 AllowPartiallyTrustedCallersAttribute,并使用 2 级安全透明模型。2 级透明度会导致 AllowPartiallyTrustedCallers 程序集中的所有方法默认变为安全透明,这可能是此异常的原因。

堆栈跟踪:

[MethodAccessException: Attempt by security transparent method 'System.Runtime.Diagnostics.DiagnosticTrace..ctor(System.String, System.Guid)' to access security critical method 'System.Runtime.Diagnostics.EtwDiagnosticTrace..ctor(System.String, System.Guid)' failed.

Assembly 'System.ServiceModel.Internals, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' is marked with the AllowPartiallyTrustedCallersAttribute, and uses the level 2 security transparency model.  Level 2 transparency causes all methods in AllowPartiallyTrustedCallers assemblies to become security transparent by default, which may be the cause of this exception.]
   System.Runtime.Diagnostics.DiagnosticTrace..ctor(String traceSourceName, Guid etwProviderId) +24
   System.ServiceModel.Activation.FxTrace.InitializeTracing() +90
   System.ServiceModel.Activation.FxTrace.get_Trace() +84
   System.ServiceModel.ServiceHostingEnvironment.EnsureInitialized() +59
   System.ServiceModel.ServiceHostingEnvironment.OnEnsureInitialized(Object state) +4
   System.ServiceModel.AspNetPartialTrustHelpers.PartialTrustInvoke(ContextCallback callback, Object state) +52
   System.ServiceModel.ServiceHostingEnvironment.SafeEnsureInitialized() +65
   System.ServiceModel.Activation.HttpModule.ProcessRequest(Object sender, EventArgs e) +58
   System.Web.SyncEventExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +143
   System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +69

我在这里完全不知所措。如果我从头开始创建任何基本应用程序并尝试启动它,即使没有添加任何内容,我也会收到此错误屏幕。我尝试从

<compilation debug="true" targetFramework="4.0" />

标记并运行它没有结果。我已经尝试删除该属性并添加

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v2.0.50727"/>
  <supportedRuntime version="v4.0.30319"/>
 </startup>

正如此线程中所建议的那样:BadImageFormatException - 是否可以指定使用哪个 .NET 版本来运行可执行文件? 我尝试修复 .Net 4.0 框架安装,因为我听说这可能是一个问题。我昨晚刚刚安装了可视化 Web 开发人员,以便处理我从 Microsoft Visual Studio 2010 转移过来的项目,因为我的试用版已过期,任何帮助或潜在的解决方法将不胜感激。

4

4 回答 4

17

我今天遇到了这个问题。据我了解,问题在于 .NET 4.0 程序集现在默认为security critical。安全透明代码不可能调用安全关键代码。

在我的案例中,解决方案与AllowPartiallyTrustedCallersAttribute仅在我的应用程序中的几个程序集上定义有关。我必须从所有程序集中删除此属性,或者将其添加到所有程序集中。

于 2012-11-27T11:29:43.467 回答
2

您可能需要将以下内容添加到您的 AssemblyInfo.cs 文件中,以便所涉及的程序集相同。

[assembly: SecurityTransparent()]
于 2014-12-17T21:20:11.523 回答
2

感谢我在这里参加聚会非常晚,但是在 VS2013 中并且在 .NET 4.5.1 ClickOnce 项目中遇到了同样的问题,我通过以下方式解决了这个问题:

  1. 打开相关 ClickOnce 项目的项目属性
  2. 打开安全选项卡
  3. 将信任设置更改为“这是一个部分信任的应用程序”
  4. 将信任设置改回“这是一个完全信任的应用程序”

希望这对其他人有帮助!

于 2015-09-18T15:05:16.410 回答
0

显然,至少使我能够在 Visual Web Developer 中启动应用程序的一种潜在解决方法是:

  • 从位于元素内的元素中删除targetFramework="4.0"属性。

  • 如果是 Silverlight 应用程序右键单击 ApplicationName.Web 标题选择属性,然后将目标框架更改为 3.5。如果是 asp.net 应用程序,请右键单击顶部项目标题并选择属性,然后将目标框架设置为 3.5。

所有这些都表明我的 .Net 4.0 框架安装存在问题。但是由于我已经安装和卸载,然后至少安装了两次 .Net 4.0 框架,这是我目前能想到的唯一选择。如果有人为我提供了更好的响应/更永久的解决方案,我会将其标记为答案。与此同时,我将尝试启动“安装其他框架”并再次重新安装 .Net 4.0 目标包和 .Net 4.0 运行时,看看它是否有效。

于 2012-08-23T16:05:53.247 回答