You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让C++ EXE加载不同目录下的C# DLL?

解决C++ EXE加载不同目录下C# DLL的配置方法

我来帮你把具体步骤理清楚,其实利用CLR的配置文件就能轻松实现这个需求,不用改太多代码,主要是配置文件的写法:

1. 创建应用程序配置文件

首先,在你的C++ EXE所在目录下,创建一个和EXE同名的.config文件。比如你的EXE叫MyCppApp.exe,那配置文件名就是MyCppApp.exe.config,这个文件必须和EXE放在同一个目录里。

2. 编写配置文件内容

打开这个配置文件,写入以下XML结构,核心是通过<probing>节点指定C# DLL所在的相对路径:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <!-- 这里填写你的C# DLL所在的相对目录,多个目录用分号分隔 -->
      <probing privatePath="CSharpDlls;../ThirdParty/Libs" />
    </assemblyBinding>
  </runtime>
</configuration>

配置说明:

  • privatePath:填写相对于EXE目录的路径,比如CSharpDlls就是EXE同目录下的CSharpDlls文件夹;../ThirdParty/Libs是EXE目录的上级目录下的ThirdParty/Libs文件夹。如果有多个目录,用分号;分隔就行。
  • CLR在加载C# DLL时,会先搜索EXE目录,然后去privatePath指定的目录里找,完全符合你的需求。

3. (可选)用绝对路径指定DLL位置

如果你的C# DLL放在固定的绝对路径下,也可以用<codeBase>节点来精确指定,但这个方法需要你的C# DLL是强签名的(有publicKeyToken和版本号),配置示例如下:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <!-- 替换成你的C# DLL的标识信息 -->
        <assemblyIdentity name="YourCSharpLibrary" 
                          publicKeyToken="1234567890abcdef" 
                          culture="neutral" />
        <!-- 替换成你的DLL的绝对路径和版本号 -->
        <codeBase version="1.0.0.0" href="D:\MyDlls\YourCSharpLibrary.dll" />
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>

注意事项:

  • 用<codeBase>时,必须准确填写C# DLL的name、publicKeyToken、version,这些信息可以通过VS的命令行工具sn.exe或者查看DLL属性获取。
  • 相对路径的<probing>方法更灵活,推荐优先使用,除非你需要固定绝对路径。

4. 验证配置

把你的C# DLL(包括它的依赖DLL)放到你指定的目录里,然后运行C++ EXE,CLR会自动按照配置文件的路径去搜索加载C# DLL,不用修改原来的CLR包装类代码。

内容的提问来源于stack exchange,提问作者N.avraham

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 06:56:12