Ran*_*oet 5 c# c++ com interop
我一直在尝试使用免注册的基于.NET的COM DLL工作,但没有成功.
但是,当我启动我的应用程序时,我得到'应用程序无法启动,因为应用程序配置不正确'.
我使用Microsoft的mt工具来提取C++客户端应用程序和C#COM DLL的清单文件,两者中的信息是相同的(C++清单文件中的dependentAssembly包含与assemblyIdentity中相同的名称和版本. COM清单文件).
我也尝试了http://msdn.microsoft.com/en-us/library/eew13bza.aspx上描述的方法,但结果相似.
类似地,我尝试在我的C++客户端应用程序的"框架和参考"中添加对COM项目的引用.该属性页面上的信息看起来很有前途(它显示了'复制本地','复制依赖关系'等选项以及'assemblyIdentity'等属性),但Visual Studio既不复制DLL也不自动向清单文件添加依赖项.
请注意,'注册变体'工作正常.
任何人对我做错了什么有任何想法?
更新:
mt -managedassemblyname:...,然后嵌入相同的清单mt -outputresource:...,但这也不会导致Windows成功解决依赖关系.我自己找到了免注册 .NET COM 互操作所需的步骤:-)
mt -managedassemblyname:"myDll.dll" -out:"myDll.manifest"mt -outputresource:"myDll.dll" -manifest "myDll.manifest"。基本上,这会将修改后的清单作为资源添加到 DLL 中。请注意,这显然不是同一个清单(位置)!如果我使用 ManagedAssemblyName 选项重新提取清单,我仍然会得到“旧”清单。如果我使用 inputresource 选项提取它,我会得到新的。我发现这一切都归功于 Windows Vista。与我的 Windows XP 不同,它包含一个名为 sxstrace 的工具,该工具提供有关并行执行问题的相当详细的信息。