C# 加载非托管dll而不将其写入磁盘

C# 加载非托管dll而不将其写入磁盘,c#,syncfusion,pdfium,C#,Syncfusion,Pdfium,我们正在使用Syncfusion.PdfViewer.WPF显示PDF。从版本16.1.0.24开始,它使用Pdfium进行渲染。它在dll中嵌入了非托管pdfium.dll,并且在运行时将其解压缩到应用程序文件夹。这在安装应用程序时不起作用,因为用户没有对c:/Program Files/的写入权限 有没有办法在不先将DLL写入磁盘的情况下加载这些DLL 从dll中提取它们并使用Assembly加载。Load不起作用,因为它是非托管dll。从16.3版开始,Pdfium dll嵌入在PdfVi

我们正在使用Syncfusion.PdfViewer.WPF显示PDF。从版本16.1.0.24开始,它使用Pdfium进行渲染。它在dll中嵌入了非托管pdfium.dll,并且在运行时将其解压缩到应用程序文件夹。这在安装应用程序时不起作用,因为用户没有对c:/Program Files/的写入权限

有没有办法在不先将DLL写入磁盘的情况下加载这些DLL


从dll中提取它们并使用Assembly加载。Load不起作用,因为它是非托管dll。

从16.3版开始,Pdfium dll嵌入在PdfViewer程序集中,Pdfium dll将在运行时提取到应用程序文件夹中,以呈现没有任何缺陷的复杂形状、图像和文本。如果应用程序文件夹没有写入权限,则可能会发生报告的异常但应用程序路径不必始终具有写入权限,您可以使用以下任一解决方案从示例级别解决报告的错误。   

解决方案1:从16.3版本开始,您需要在示例级别添加以下代码段,以将渲染引擎更改为使用SfPdf渲染引擎,并避免在应用程序文件夹中生成Pdfium DLL。 

PdfDocumetView pdfDocumentView = new PdfDocumentView();  
pdfDocumentView.RenderingEngine = 
Syncfusion.Windows.Forms.PdfViewer.PdfRenderingEngine.SfPdf;  
pdfDocumentView.Load("Sample.pdf");  
解决方案2:  如果需要使用Pdfium渲染引擎,并避免在写权限受限文件夹中生成Pdfium DLL。通过设置ReferencePath属性,可以在授予写入权限的自定义路径中重定向Pdfium程序集的提取。 

PdfDocumetView pdfDocumentView = new PdfDocumentView();  
pdfDocumentView.ReferencePath = @"D:\ReferencePath\";  
pdfDocumentView.Load("Sample.pdf");  
注意:在运行时,PDF查看器将检查ReferencePath属性中提供的自定义路径。如果您已将Pdfium DLL放置在UG链接()中提到的自定义路径中,它将引用该位置中已可用的DLL,而不生成DLL。 

问候,


Uthandaraja S(我为Syncfusion工作)

为什么不能写入临时目录而不是程序文件?除此之外,通过谷歌搜索“从内存加载dll”会得出一个否定的结论,操作系统加载程序要求dll位于磁盘上。Hackorama从不适用于具有大量依赖项的非托管DLL。部署说明。PDFviewer不会在临时目录中搜索它。我们正在使用他们的nuget,并且它不包含所需的DLL。我希望避免创建我们自己的nuget,用添加的依赖项包装此库。除了ReferencePath标记为“[过时(“ReferencePath已弃用”)]”之外,您确定它还能工作吗?当我像这样使用它“”时,它仍然将DLL提取到exe的文件夹,而不是ReferencePath属性中提供的文件夹。好的,RenderingEngine=“SfPdf”可以工作。但库在不同版本之间更改默认值不是很奇怪吗。新的默认行为不起作用,但只有在客户没有安装文件夹的管理员权限时才起作用。听起来像是给图书馆的用户引入了很多难以追踪的bug。