【发布时间】:2017-09-05 16:23:56
【问题描述】:
我在 Release 文件夹中有一个应用程序“app.exe”(一个 C++ 应用程序)。 我编写了一个 C++/CLI DLL (clr.dll) 来调用一个 C# DLL (csharp.dll)。这两个 DLL 都在 etc 文件夹中。
Release
|-etc
|-clr.dll
|-csharp.dll
|-app.exe
app.exe 可以加载 clr.dll 但 clr.dll 无法定位 csharp.dll。
我使用 fuslogvw.exe 发现 CLR 正在尝试在 Release 文件夹中进行搜索。
有人能帮我想出一个方法,让 CLR 在我的 etc 文件夹中搜索吗?
【问题讨论】:
-
将 DLL 存储在另一个文件夹中是一种非常糟糕的做法。从不提供帮助来定位 clr.dll 的操作系统开始。希望你没有做一些讨厌的事情,比如修改 PATH 环境变量。托管程序集也差不多,CLR 首先在 GAC 中查找,然后在与 EXE 相同的目录中查找。它可以被说服在一个子目录中查找,该子目录需要一个 appname.exe.config 文件,该文件与本机 C++ 应用程序位于同一目录中,并带有
<probing>element。 -
@HansPassant:这个应用程序已经开发完成,二进制文件被分类到文件夹结构中。因此,当此应用程序加载时,会在 PATH 环境变量中添加一些路径,以便应用程序可以找到 dll。现在根据这个我必须将我的 dll 放在一个单独的文件夹中(而不是与 app.exe 一起)。配置文件是唯一的方法吗?
-
我们可以在这里整天发布好的建议。但是,如果用户不想听它,因为“它是分类的”并且不想使用建议的解决方案,那么他们将不得不自己参加硬敲门学校来学习。
-
@HansPassant:我认为你误解了我的意图。我更愿意听取建议,我只是向您说明我的情况。我一定会采纳你的建议并用我的发现更新你。