我引用的是NuGet包ABCpdf,它在x86和x64变体中提供了托管DLL abcpdf.dll和四对本地DLL:
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的引用;这将生成此错误。
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)发布于 2021-06-13 23:19:51
我相信与Visual不同,Linqpad没有“构建”步骤,并且动态地将引用的程序集加载到Linqpad进程中。其结果是Linqpad无法运行通常作为包安装的一部分安装的附加构建任务,然后MSBuild进程可以在构建阶段运行这些任务。我并不是百分之百确定这是发生在这里,但如果你的VS项目运行良好,那么这似乎是可能的原因。
理论上,而且我在这里100%地推测,对这些包的支持可以添加到Linqpad中,但是,我在这里说的是值得(来自软件经济学PoV),还是它甚至是正确的解决方案?我甚至认为包作者在这方面有更多的发言权。
在任何情况下,可能有办法自己做(这将是一个肮脏的黑客)。在NuGet包中,托管库可以在包的lib文件夹下的各自框架文件夹中找到,如果它们还需要本机DLL,技术上它们也应该与托管DLL一起捆绑在同一个文件夹中。
因此,您在这里可能有一些其他选项:您可以尝试让包作者看看他们是否愿意复制并将本机DLL连同托管DLL一起包含在他们的包中,这将解决您的问题(这是理想的情况!)
或者,如果你是一个DIY类型的人,并且愿意花更多的时间在这个问题上,你可能会写一个脚本/应用程序来自动为你这样做,并在本地保存一个新的包。您所要做的就是引用这个本地包。
https://stackoverflow.com/questions/52504341
复制相似问题