【发布时间】:2012-01-09 19:18:31
【问题描述】:
我试图在我的 .NET 项目中引用一个托管 DLL,而不是将它复制到我的输出目录中。因此,当我的程序运行时,它会从它安装的位置运行 DLL——无论它在哪里。问题在于这个托管 DLL 调用非托管 DLL。当我尝试引用托管 DLL 时,它会抛出 FileNotFound Exception - Could not load file or assembly 'CharacterGen' or one of its dependencies. The system cannot find file specified。当我将输出设置在与我引用的 DLL 相同的目录中时,一切正常。通常的解决方案是同时引用从另一个程序集中调用的 DLL。但是,我无法从我的托管程序中引用非托管程序集。
有没有办法引用调用非托管 DLL 的托管 DLL?
【问题讨论】:
-
你熟悉GAC吗?如果您不想复制到 bin 文件夹中,则创建一个单独的文件夹,但您仍需要将 .dll 复制到该文件夹,引用它们等。如果不是,您将不得不使用搜索路径执行一些 LoadFromAssebly 代码为什么会您不想只是将 .dll 复制到可以正确引用的位置.. 如果用户想要运行您的应用程序/将其设置在不同的目录结构中,您是否考虑过以这种方式创建 MSI 安装程序.. 在至少他们可以做到这一点,并且相关的参考依赖将被处理..
-
我对 GAC 不太熟悉,但据我了解,程序集必须签名。我无法控制我引用的 DLL,因此我无法验证它们是否已签名。我考虑了一个安装程序,但我不想安装到用户的现有目录中,因为它不是我的程序目录,它是存在于我客户机器上的目录。如果没有其他方法,那将是我的后备。
-
GAC 不能用于引用非托管 DLL。
标签: c# .net dll reference assemblies