gpt4 book ai didi

linqpad - LINQPad 中的 native DLL

转载 作者:行者123 更新时间:2023-12-04 11:16:55 32 4
gpt4 key购买 nike

我正在引用 NuGet 包 ABCpdf ,它提供了一个托管的 DLL abcpdf.dll以及四对原生 DLL,在 x86 和 x64 版本中:

packages\ABCpdf\11.2.2\build\PrintHook64.dll
packages\ABCpdf\11.2.2\build\3DGlue11-32.dll
packages\ABCpdf\11.2.2\build\3DGlue11-64.dll
packages\ABCpdf\11.2.2\build\ABCpdf11-32.dll
packages\ABCpdf\11.2.2\build\ABCpdf11-64.dll
packages\ABCpdf\11.2.2\build\ChakraCore32.dll
packages\ABCpdf\11.2.2\build\ChakraCore64.dll
packages\ABCpdf\11.2.2\build\PrintHook32.dll

在需要一个或多个这些 DLL 的 LinqPad 中运行的查询失败,除非我手动将所有这些 DLL 复制到 %PROGRAMFILES%\LINQPad5 ,如建议 here由 LINQPad 作者@joe-albahari。

那是在2016年。2018年有没有更自动的方式?

我尝试在查询属性中添加对 native DLL 的引用;产生这个错误
CS0009 Metadata file '..\ABCpdf11-64.dll' could not be opened -- PE image doesn't contain managed metadata.

我尝试使用 将所有非框架引用复制到单个本地文件夹 选项,这听起来像是专为这种情况而设计的。不幸的是,这也不起作用;仍然有这个错误
DllNotFoundException: Unable to load DLL 'ABCpdf11-32.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)

最佳答案

我相信与 Visual Studio 不同的是,Linqpad 没有“构建”步骤,而是将引用的程序集动态加载到 Linqpad 进程中。结果是 Linqpad 无法运行额外的构建任务,这些任务通常作为包安装的一部分安装,然后可以在构建阶段由 MSBuild 进程运行。我不是 100% 确定这是否是这里发生的事情,但如果您的 VS 项目运行良好,那么这似乎是可能的原因。
理论上,我在这里 100% 推测,对这些软件包的支持可以添加到 Linqpad,但是,我在这里说的是,它是否值得(来自软件经济学 PoV),或者它甚至是正确的解决方案?我什至认为包作者在这方面有更多发言权。
无论如何,可能有办法自己做(这将是一个肮脏的黑客)。在 NuGet 包中,可以在 lib 下的相应框架文件夹中找到托管库。包的文件夹,如果它们还需要 native DLL,从技术上讲,它们也应该与托管的文件夹一起捆绑在同一文件夹中。
因此,您在这里可能还有其他一些选择:您可以尝试询问包作者,看看他们是否愿意复制并包含 native DLL 以及他们的包中的托管 DLL,这将解决您的问题(这是理想情况!)
或者,如果您是 DIY 类型的人并且愿意在这方面花更多的时间,您可能可以编写一个脚本/应用程序来自动为您执行此操作并在本地保存一个新包。您所要做的就是引用该本地包。

关于linqpad - LINQPad 中的 native DLL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52504341/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com