【发布时间】:2014-04-16 10:30:25
【问题描述】:
我正在尝试在我的 VB.NET 项目中使用第 3 方 DLL(PDFExtract from 3-Heights)。该软件包附带 2 个 .NET DLL,我应该按照手册将其添加为项目中的引用,以及我需要将其作为现有项目添加到项目中的第三个本机 DLL。
帮助说:“3-Heights™ PDF Extract API 不提供纯 .NET 解决方案。相反,它由添加到项目中的 .NET 程序集和由.NET 程序集。安装和部署工具时必须考虑到这一点。"
我完全按照这些步骤操作,但是当我尝试从 DLL 初始化对象时出现以下错误: “在 MyProject.exe 中发生了“System.TypeInitializationException”类型的未处理异常 附加信息:“Pdftools.PdfExtract.Document”的类型初始化程序引发了异常。”
根据帮助手册,这表明windows找不到本地DLL。
下载的包包含示例 VB.NET 项目,令人惊讶地运行没有问题。我比较了这两个项目,找不到与问题相关的任何不同之处。如果我以该示例项目为起点,然后在其上添加我的文件并调用我的程序,那么代码将起作用!我的项目中必须缺少一些设置或链接。有什么想法吗?
我的问题是我想创建一个 DLL,所以我需要一个新的类库项目。因此,我不能从作为 Windows 窗体项目的示例项目开始。
我的问题是:是否有任何隐藏设置或指向 DLL 的链接可以在示例项目中使用,而不是在我的项目中?否则,我看到的可能是什么原因?
【问题讨论】:
-
我认为您应该将 Native DLLs 属性更改为
Copy Always或Copy If Newer以便链接器将 dll 复制到您的构建路径。最好将编译器选项设置为None。 -
如果您清理您的解决方案,然后重新构建,本机 dll 是否与他们的 .net 包装器和您的东西一起部署?即出现在 bin/debug 中(或任何你正在构建它的地方)。
-
实际上它被设置为 Copy If Newer。我不明白您将编译器选项设置为无的意思,但我转到项目属性、编译器选项卡并比较了示例和我的项目并发现了不同之处:标有“首选 32 位”的复选框已禁用,并且在工作示例项目中显示为灰色,并在我的项目中启用。我禁用了它,一切正常!非常感谢您的启发。