0

我正在将较旧的应用程序从 .Net 2 升级到 .Net 4。该程序使用 infopath 表单,它们在工作时引起了相当多的烦恼。首先,它抛出了 FileLoadException,并显示消息“混合模式程序集是针对运行时的版本‘v2.0.50727’构建的,如果没有额外的配置信息,就无法在 4.0 运行时中加载。” 我做了一些研究并将以下内容添加到我的 app.config 文件中:

<startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>

然后我从 Visual Studio 中重新运行该应用程序,当它只是尝试打开一个表单时,它现在抛出一个 COMException,并且“此方法显式使用 CAS 策略,该策略已被 .NET Framework 淘汰。为了出于兼容性原因启用 CAS 策略,请使用 NetFx40_LegacySecurityPolicy 配置开关。” 所以我愿意。我将以下内容添加到我的 app.config 文件中:

<runtime>
    <NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>

现在,当它尝试打开 InfoPath 表单时,它告诉我需要在我的计算机上安装 .Net 3.5。我想我的问题是,我真的必须将 .Net 3.5 框架安装到计算机上才能运行此应用程序,即使它在 .Net 4.0 中?.Net 3.5 的紧凑版本不起作用,我假设这是从 3.5 到 4.0 的所有 CAS 更改,但我希望有一种编程方式来解决这个问题并打开/保存 InfoPath 表单而不必让用户在他们的计算机上安装另一个框架。

4

1 回答 1

0

事实证明,如果您启用了 ClickOnce 安全性(解决方案属性>安全性>启用 ClickOnce 安全性设置),这将在尝试调试时导致此问题。但是,如果您发布项目(启用 ClickOnce 安全性),您可以打开应用程序并正常使用它。因此,对于调试,禁用 ClickOnce 安全性,对于正常测试和部署,启用它,然后发布项目以供正确使用。

于 2012-08-15T18:41:13.250 回答