【问题标题】:Search Path for .NET assembly dependent on C++/CLI DLL.NET 程序集的搜索路径取决于 C++/CLI DLL
【发布时间】: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:我认为你误解了我的意图。我更愿意听取建议,我只是向您说明我的情况。我一定会采纳你的建议并用我的发现更新你。

标签: c# c++ c++-cli clr


【解决方案1】:

当您的应用程序能够找到 clr.dll 时,指示应用程序域解析此文件夹中的其他模块应该很容易。

clr.dll 知道它是从 (Win32: GetModulePathName) 加载的。

您可以在 stackoverflow 中使用已知链接:

How to add folder to assembly search path at runtime in .NET?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-02-27
    • 2011-05-05
    • 2011-01-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多