如何在Visual Studio中正确引用编辑后的自定义Interop程序集(RCW)
可行解决方案
方案1:自动替换原生生成的RCW(最稳定,支持CI/CD)
你构思的混合方案完全可用,仅需添加少量配置即可实现全流程自动化,无需手动操作:
- 保留现有项目中的
COMReference配置不变,保证智能提示、对象浏览器功能正常 - 在主项目
.csproj文件末尾的</Project>标签之前,添加如下构建目标:
<Target Name="ReplaceCustomRCW" AfterTargets="ResolveComReferences"> <Copy SourceFiles="..\你的MSIL项目输出路径\Interop.PortableDeviceApiLib.dll" DestinationFiles="$(IntermediateOutputPath)Interop.PortableDeviceApiLib.dll" OverwriteReadOnlyFiles="true" /> </Target>
- 将MSIL项目设置为主项目的项目依赖,每次构建主项目前会自动编译生成最新的自定义RCW,构建过程会自动覆盖tlbimp生成的默认RCW文件,完全兼容自动化构建流水线。
方案2:直接引用自定义RCW修复智能提示
直接引用自定义DLL无智能提示,基本是编译MSIL时未生成配套XML文档、或引用配置错误导致:
- 移除项目中的
COMReference配置,直接添加对自定义Interop.PortableDeviceApiLib.dll的程序集引用 - 打开该引用的属性面板,将
嵌入互操作类型设置为True,和原有COM引用配置保持一致 - 编译MSIL时给ilasm添加
/doc:参数生成对应XML文档文件,和DLL放在同一路径即可正常显示智能提示。
常见误区说明
你遇到的MSB3284报错和RCW完全无关,是因为修改COMReference的版本号后,MSBuild会尝试从注册表匹配对应版本的COM类型库,你系统中注册的PortableDeviceApi类型库本身就是1.0版本,自然会报错。RCW本身不需要注册,无需浪费时间查找相关注册方法。
另外自定义RCW本来就不会显示在COM引用对话框中,该对话框仅枚举系统注册的COM类型库,不需要做这方面的尝试。
内容的提问来源于stack exchange,提问作者Bondolin
相关产品推荐
相关产品推荐

