1

我使用 InfoPath.FormControl 在 .NET4.0 WPF 应用程序中托管 InfoPath 表单,例如

<WindowsFormsHost Name="infoPathFormsHost">
    <ip:FormControl x:Name="infoPathXmlEditor"/>
</WindowsFormsHost>

一切运行良好,我可以使用以下方法成功打开表单:

this.infoPathXmlEditor.NewFromFormTemplate(formTemplatePath, fileStream, XmlFormOpenMode.Default);

但是,当我尝试使用 MainSource 上的 CreateNavigator 导航表单中的元素时,我开始遇到问题,例如

this.infoPathXmlEditor.XmlForm.MainDataSource.CreateNavigator().SelectSingleNode(xPathToElement);

此时我得到以下异常:

“混合模式程序集是针对运行时版本‘v2.0.50727’构建的,如果没有额外的配置信息,则无法在 4.0 运行时中加载。”

我设法找到解决这个问题的方法是将以下内容添加到 app.config 文件中:

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

但是,当我添加时,我现在在NewFromFormTemplate方法调用上得到了这个异常:

InfoPath 无法创建新的空白表单。InfoPath 无法打开表单。要解决此问题,请联系您的系统管理员。

表单模板:file:/// 由于表单代码错误,InfoPath 无法打开所选表单。此方法显式使用已被 .NET Framework 废弃的 CAS 策略。为了出于兼容性原因启用 CAS 策略,请使用 NetFx40_LegacySecurityPolicy 配置开关。有关详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=155570

有谁知道这个问题的解决方案?任何帮助将非常感激。

注意:InfoPath FormCode.cs 中没有代码隐藏。

4

1 回答 1

1

添加

<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0.30319"/>
<startup/>
<runtime>
<netFx40_LegacySecurityPolicy enabled="true"/>
<runtime/>

添加运行时标签后它对我有用!

于 2011-10-21T19:10:28.827 回答