如何修改.NET 6 COM宿主.comhost.dll的版本信息及发布者信息?
修改C# COM应用中.comhost.dll的VERSIONINFO信息
方法1:通过MSBuild目标自动替换资源
默认的comhost.dll是.NET SDK生成的通用宿主文件,自带微软的版本信息。可以通过在项目中添加MSBuild任务,在编译完成后自动替换其VERSIONINFO资源,无需手动用Resource Hacker修改。
步骤如下:
创建自定义版本资源文件
在项目根目录新建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等字段。在项目文件中添加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
相关产品推荐
相关产品推荐

