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

如何修改.NET 6 COM宿主.comhost.dll的版本信息及发布者信息?

修改C# COM应用中.comhost.dll的VERSIONINFO信息

方法1:通过MSBuild目标自动替换资源

默认的comhost.dll是.NET SDK生成的通用宿主文件,自带微软的版本信息。可以通过在项目中添加MSBuild任务,在编译完成后自动替换其VERSIONINFO资源,无需手动用Resource Hacker修改。

步骤如下:

  1. 创建自定义版本资源文件
    在项目根目录新建CustomVersion.rc文件,内容示例:

    #include <winver.h>
       VS_VERSION_INFO VERSIONINFO
       FILEVERSION 1,0,0,0
       PRODUCTVERSION 1,0,0,0
       FILEFLAGSMASK 0x3fL
       #ifdef _DEBUG
       FILEFLAGS 0x1L
       #else
       FILEFLAGS 0x0L
       #endif
       FILEOS 0x40004L
       FILETYPE 0x2L
       FILESUBTYPE 0x0L
       BEGIN
           BLOCK "StringFileInfo"
           BEGIN
               BLOCK "040904B0"
               BEGIN
                   VALUE "CompanyName", "你的公司名称"
                   VALUE "FileDescription", "COM宿主DLL"
                   VALUE "ProductName", "你的产品名称"
                   VALUE "ProductVersion", "1.0.0.0"
                   VALUE "LegalCopyright", "© 你的公司 2024"
               END
           END
           BLOCK "VarFileInfo"
           BEGIN
               VALUE "Translation", 0x409, 1200
           END
       END

    根据需求修改CompanyName、ProductName等字段。

  2. 在项目文件中添加MSBuild目标
    打开项目的.csproj文件,添加以下代码,实现编译后自动替换资源:

    <Target Name="UpdateComHostVersionInfo" AfterTargets="Publish">
      <!-- 编译RC文件为RES资源 -->
      <Exec Command="rc /r CustomVersion.rc" />
      <!-- 替换comhost.dll中的版本资源 -->
      <Exec Command="mt.exe -inputresource:$(PublishDir)$(AssemblyName).comhost.dll;#1 -outputresource:$(PublishDir)$(AssemblyName).comhost.dll;#1 -updateresource:CustomVersion.res;#1" />
      <!-- 清理临时生成的RES文件 -->
      <Delete Files="CustomVersion.res" />
    </Target>
    
    <!-- 如果是Debug/Release直接编译,添加这个目标 -->
    <Target Name="UpdateComHostVersionInfoForBuild" AfterTargets="Build">
      <Exec Command="rc /r CustomVersion.rc" />
      <Exec Command="mt.exe -inputresource:$(OutputPath)$(AssemblyName).comhost.dll;#1 -outputresource:$(OutputPath)$(AssemblyName).comhost.dll;#1 -updateresource:CustomVersion.res;#1" />
      <Delete Files="CustomVersion.res" />
    </Target>
    

    注意:确保rc.exe和mt.exe在系统路径中,或者指定完整路径(通常位于C:\Program Files (x86)\Windows Kits\10\bin\<版本号>\x64目录下)。

方法2:自定义COM宿主(彻底控制)

如果需要完全自定义宿主的行为和版本信息,可以放弃使用默认的comhost.dll,自行实现COM宿主:

  • 创建一个新的C++项目(原生DLL),实现COM宿主所需的核心接口(如IClassFactory、IUnknown),并加载你的.NET COM DLL。
  • 在这个C++项目的属性中设置版本信息(公司名称、产品名称等),编译后将生成的DLL重命名为YourApplication.comhost.dll,替换默认生成的文件。
  • 这种方法灵活性最高,但需要具备基础的COM原生开发知识。

注意事项

  • 确保自定义版本信息的字段(如ProductVersion)与主.NET DLL的版本信息保持一致,避免版本混淆。
  • 测试修改后的comhost.dll是否能正常注册和运行,避免资源替换导致的兼容性问题。

内容的提问来源于stack exchange,提问作者Taniko Yamamoto

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:45:27