c# windows 微软服务点 System.TypeInitializationException

c# windows microsoft pointofservice System.TypeInitializationException

我在同一个解决方案下有两个 Windows Forms 应用程序。

A.EXE 框架是针对 x86 的 4.5.2。

B.EXE 框架是针对 x86 的 3.5。

点击按钮 A.EXE 我打开 B.EXE。

在B.EXE中有一个打印到EPSON TMT81的功能。

在 B.EXE 表单加载中,我初始化打印机对象...

m_Printer = new ThermalPrinter();

热敏打印机class:

string strLogicalName = "PosPrintTMT81";

try
{
    //Create PosExplorer

    PosExplorer posExplorer = new PosExplorer();

    DeviceInfo deviceInfo = null;

    try
    {
        deviceInfo = posExplorer.GetDevice(DeviceType.PosPrinter, strLogicalName);
        m_Printer = (PosPrinter)posExplorer.CreateInstance(deviceInfo);
    }
    catch (Exception ex)
    {
        string strErrorMsg = ex.Message.ToString() 
            + "\n\nPlease rectify the error and try again.";
        LogException(ex);
        return strErrorMsg;
    }

PosExplorer posExplorer = new PosExplorer();行returns错误...

System.TypeInitializationException The type initializer for 'Microsoft.PointOfService.Management.Explorer' threw an exception.

此问题的一个常见解决方案是通过将以下内容添加到您的 app.config 来恢复旧版 .NET 代码访问安全 (CAS) 策略:

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

有关详细信息,请参阅 here & here

您可以尝试将此添加到两个应用程序的 app.config 中,看看是否可以解决问题。但是,这仅适用于 .NET 4 及更高版本中的应用 运行ning。

如果更改此设置对您来说不是长期解决方案,那么您的 B 应用确实必须 运行 仅在 .NET 3.5 中。因此,您需要调查导致它在 .NET 4 中 运行 的原因。

可能是您从 A 打开应用 B 的特定方式造成的 - 您可以提供该代码。

或者您的 B app.config 中是否有类似以下内容?...

<startup>
    <supportedRuntime version="v4.0"/> 

您还可以提供 app.config。