首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >LINQPad中的本机DLL

LINQPad中的本机DLL
EN

Stack Overflow用户
提问于 2018-09-25 18:07:45
回答 1查看 719关注 0票数 15

我引用的是NuGet包ABCpdf,它在x86和x64变体中提供了托管DLL abcpdf.dll和四对本地DLL:

代码语言:javascript
复制
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中,这是LINQPad作者@joe建议的here

那是在2016年。2018年还会有更多的自动方式吗?

我尝试在查询属性中添加对本机DLL的引用;这将生成此错误。

代码语言:javascript
复制
CS0009 Metadata file '..\ABCpdf11-64.dll' could not be opened -- PE image doesn't contain managed metadata.

我尝试使用将所有非框架引用复制到一个本地文件夹选项,这听起来就是为这种情况而设计的。不幸的是,这也不起作用;仍然有这个错误

代码语言:javascript
复制
DllNotFoundException: Unable to load DLL 'ABCpdf11-32.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)
EN

回答 1

Stack Overflow用户

发布于 2021-06-13 23:19:51

我相信与Visual不同,Linqpad没有“构建”步骤,并且动态地将引用的程序集加载到Linqpad进程中。其结果是Linqpad无法运行通常作为包安装的一部分安装的附加构建任务,然后MSBuild进程可以在构建阶段运行这些任务。我并不是百分之百确定这是发生在这里,但如果你的VS项目运行良好,那么这似乎是可能的原因。

理论上,而且我在这里100%地推测,对这些包的支持可以添加到Linqpad中,但是,我在这里说的是值得(来自软件经济学PoV),还是它甚至是正确的解决方案?我甚至认为包作者在这方面有更多的发言权。

在任何情况下,可能有办法自己做(这将是一个肮脏的黑客)。在NuGet包中,托管库可以在包的lib文件夹下的各自框架文件夹中找到,如果它们还需要本机DLL,技术上它们也应该与托管DLL一起捆绑在同一个文件夹中。

因此,您在这里可能有一些其他选项:您可以尝试让包作者看看他们是否愿意复制并将本机DLL连同托管DLL一起包含在他们的包中,这将解决您的问题(这是理想的情况!)

或者,如果你是一个DIY类型的人,并且愿意花更多的时间在这个问题上,你可能会写一个脚本/应用程序来自动为你这样做,并在本地保存一个新的包。您所要做的就是引用这个本地包。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52504341

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档