我遇到了一个奇怪的问题。 我已经编写了一个dll(作为Navision的插件),它通过process.start()调用控制台应用程序。使用IKVM的控制台应用程序使用pdfbox.net(v1.8.4)。
如果我直接运行控制台应用程序(在visual studio中使用cmd或“start”)一切正常。 如果我通过类libary(使用单元测试(mstest)测试)或任何其他(测试)项目的process.start()启动控制台应用程序,我会得到一个例外:
javax.xml.parsers.FactoryConfigurationError:Provider com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl not 结果
我的process.start来自类lib:
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);
有关例外的详细信息: 消息:
未找到提供商com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl
来源:
IKVM.OpenJDK.XML.API
堆栈跟踪:
((java.lang.Throwable)_exception).StackTrace“bei javax.xml.parsers.DocumentBuilderFactory.newInstance() bei Mustang.ZUGFeRDImporter.parse()在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)在C:\ GIT \ KCorp.NAV.Zugferd \ KCorp.Nav.Zugferd.Split \ Zaumzeug.cs:Zeile 30。“
有人知道如何解决这个问题吗?
如果您需要进一步的信息,请告诉我。
提前感谢。
答案 0 :(得分:1)
这是一个类加载器问题。尝试在调用工厂的行之前添加以下内容:
var s = new com.sun.org.apache.xerces.@internal.jaxp.SAXParserFactoryImpl();
这将迫使程序集加载,并且每次遇到此问题时都会为我工作。