如何解决带有 .Net Core 3.1 / .Net 5 的 TikaOnDotNet 失败,方法未找到:'Void System.IO.FileStream..ctor
在 .Net Core 3.1 和 .Net 5 中,我尝试引用 TikaOnDotNet nugget 包。
示例代码如下。
using System;
using System.IO;
using TikaOnDotNet.TextExtraction;
namespace tika
{
class Program
{
static void Main(string[] args)
{
var textExtractor = new TextExtractor();
var original = new FileInfo(Path.Combine(Directory.GetCurrentDirectory(),@"pptexamples.ppt"));
var wordDocContents = textExtractor.Extract(original.FullName);
}
}
}
在 textExtractor.Extract 方法中,它抛出以下异常。
TikaOnDotNet.TextExtraction.TextExtractionException: "Extraction of text from the file '/Users/serhatonal/Projects/tika/tika/bin/Debug/netcoreapp3.1/pptexamples.ppt' Failed." ---> TikaOnDotNet.TextExtraction.TextExtractionException: "Extraction Failed." ---> System.MissingMethodException: "Method not found: 'Void System.IO.FileStream..ctor(System.String,System.IO.FileMode,System.Security.AccessControl.FileSystemRights,System.IO.FileShare,Int32,System.IO.FileOptions)'."
at at Java_java_io_FileDescriptor.open(String name,FileMode fileMode,FileAccess fileAccess)\n at java.io.FileDescriptor.open(String,FileMode,FileAccess )\n at java.io.FileDescriptor.open(String,Int32 )\n at java.io.FileDescriptor.openReadOnly(String )\n at Java_java_io_RandomAccessFile.open0(Object _this,String name,Int32 mode,FileDescriptor fd,Int32 O_RDWR)\n at java.io.RandomAccessFile.open0(String,Int32 )\n at java.io.RandomAccessFile.open(String,Int32 )\n at java.io.RandomAccessFile..ctor(File file,String mode)\n at java.util.zip.ZipFile..ctor(File file,Charset charset)\n at java.util.zip.ZipFile..ctor(File file,Int32 mode)\n at java.util.jar.JarFile..ctor(File file,Boolean verify,Int32 mode)\n at java.util.jar.JarFile..ctor(String name)\n at IKVM.NativeCode.ikvm.runtime.AssemblyClassLoader.lazyDefinePackages(ClassLoader _this)\n at ikvm.runtime.AssemblyClassLoader.lazyDefinePackages()\n at ikvm.runtime.AssemblyClassLoader.lazyDefinePackagesCheck()\n at ikvm.runtime.AssemblyClassLoader.getPackage(String name)\n at java.lang.Package.getPackage(Class )\n at java.lang.class.getPackage()\n at org.apache.tika.mime.MimeTypesFactory.create(String coreFilePath,String extensionFilePath,ClassLoader classLoader)\n at org.apache.tika.mime.MimeTypes.getDefaultMimeTypes(ClassLoader classLoader)\n at org.apache.tika.config.TikaConfig.getDefaultMimeTypes(ClassLoader )\n at org.apache.tika.config.TikaConfig..ctor()\n at org.apache.tika.config.TikaConfig.getDefaultConfig()\n at org.apache.tika.parser.AutoDetectParser..ctor()\n at TikaOnDotNet.TextExtraction.Stream.StreamTextExtractor.Extract(Func`2 streamFactory,Stream outputStream)
--- End of inner exception stack trace ---
at at TikaOnDotNet.TextExtraction.Stream.StreamTextExtractor.Extract(Func`2 streamFactory,Stream outputStream)\n at TikaOnDotNet.TextExtraction.TextExtractor.Extract[TExtractionResult](Func`2 streamFactory,Func`3 extractionResultAssembler)\n at TikaOnDotNet.TextExtraction.TextExtractor.Extract[TExtractionResult](String filePath,Func`3 extractionResultAssembler)
--- End of inner exception stack trace ---
at TikaOnDotNet.TextExtraction.TextExtractor.Extract[TExtractionResult](String filePath,Func`3 extractionResultAssembler)\n at TikaOnDotNet.TextExtraction.TextExtractor.Extract(String filePath)\n at tika.Program.Main(String[] args) in /Users/serhatonal/Projects/tika/tika/Program.cs:16
即使我发现了这个问题 "System.MissingMethodException: "Method not found: 'Void System.IO.FileStream..ctor(System.String,System.Security.AccessControl. FileSystemRights,System.IO.FileOptions)'."" 被认为已修复,.Net 5 版本的以下问题仍然存在。
https://github.com/dotnet/runtime/issues/30435
有人和我有同样的问题吗?
解决方法
IMVM 库的基础,因为这是一个java端口,不是dotnet 核心兼容。
https://github.com/KevM/tikaondotnet/issues/136#issuecomment-583695410
不幸的是,这就是原因。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。