IKVM 在使用 pdfbox.net 时如果 运行 和 process.start 找不到提供者

IKVM Does not found Provider if run with process.start while using pdfbox.net

我遇到了一个奇怪的问题。 我已经编写了一个 dll(作为 Navision 的插件),它通过 process.start() 调用控制台应用程序。使用IKVM的控制台应用程序使用 pdfbox.net (v1.8.4).

如果我直接 运行 控制台应用程序(在 visual studio 中使用 cmd 或 "start")一切正常。 如果我从 class 库(使用单元测试 (mstest) 测试)或任何其他(测试-)项目通过 process.start() 启动控制台应用程序,我得到一个异常:

javax.xml.parsers.FactoryConfigurationError: Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found

我的 process.start 来自 class 库:

string[] args = {pdfFilePath, zugferdFilePath};
ProcessStartInfo processStartInfo = new ProcessStartInfo
{
    FileName = exeFile,
    Arguments = string.Join(" ", args),
    WorkingDirectory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location),
    ErrorDialog = true,
    RedirectStandardError = true,
    RedirectStandardOutput = true,
    UseShellExecute = false
};
Process process = Process.Start(processStartInfo);

异常详情: 留言:

Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not found

来源:

IKVM.OpenJDK.XML.API

堆栈跟踪:

((java.lang.Throwable)_exception).StackTrace " bei javax.xml.parsers.DocumentBuilderFactory.newInstance() bei Mustang.ZUGFeRDImporter.parse() in C:\GIT\KCorp.NAV.Zugferd\KCorp.Nav.Zugferd.Split\Mustang\ZUGFeRDImport.cs:Zeile 124. bei KCorp.Nav.Zugferd.Split.Zaumzeug.showZUGFeRD(String filepath,String xmlFilePath) in C:\GIT\KCorp.NAV.Zugferd\KCorp.Nav.Zugferd.Split\Zaumzeug.cs:Zeile 30."

有人知道如何解决这个问题吗?

如果您需要更多信息,请告诉我。

提前致谢。

这是一个类加载器问题。尝试在调用工厂的行之前添加以下内容:

var s = new  com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();

这将强制加载程序集,并且在我每次遇到此问题时都对我有用。