我有一个具有本机dll依赖项的混合模式dll。
我正在使用Assembly.Load从C# exe加载混合模式dll。但是,混合模式dll的位置不在应用程序bin目录中,因此它会失败,因为它只在bin目录和PATH环境变量中查找本机C++ dll。
我认为使用选项/assemblylinkresource可以阻止这种情况,并强制在部署的混合模式dll旁边的备用目录中找到本机dll。事实证明这是不正确的。
有没有一种方法可以使用现有的C++/CLI混合模式dll创建具有本机dll的多文件程序集?我所见过的唯一的例子( dll )是结合使用.netmodules和本机http://msdn.microsoft.com/en-us/library/xawyf94k(v=vs.100).aspx。
因此,解决方案是:
a)一些如何强制应用程序在您选择的目录中搜索本机依赖项;或者b)将本机dll打包到一个托管的混合模式程序集中(这可能吗??)-因为静态链接依赖项不是一个选项。
发布于 2013-07-17 06:27:03
适用正常的Windows DLL搜索规则。所以,是的,它找不到这些DLL的希望。“多文件程序集”也不能工作,你不能合并本机代码。您拥有的选项,大致按首选顺序排列:
Window
并排缓存中安装DLL,并使用清单将其告知。这很难做对。
发布于 2013-07-17 06:22:01
解决方案的潜在候选者,未使用MMA进行测试:这可能不是您希望的最佳解决方案,但我认为我会添加它,因为它可以帮助您实现解决方案a)。在c++中,您可以通过使用SetDllDirectory手动设置要搜索的目录(仅在XP SP1中可用)或通过使用LoadLibraryEx手动加载dll来控制加载路径和dll。
我猜人们可以在C#中使用P/invokes访问这些调用
[DllImport("kernel32.dll", CharSet=CharSet.Auto)]
private static extern void SetDllDirectory(string lpPathName);https://stackoverflow.com/questions/17687755
复制相似问题