Visual Studio 2010 64位COM互操作问题

17

我正在尝试将一个VC6 COM DLL添加到我们的VS2010RC C#解决方案中。该DLL使用VC6工具编译为x86版本,并使用VC7跨平台工具编译为VC7 DLL。

只要使用C#项目的平台设置为x86,就可以正常使用程序集的x86版本。无论实际上注册的是x64还是x86版本的DLL,它都可以正常工作。如果平台设置为“Any CPU”,则在加载Interop.<name>.dll时会收到BadImageFormatException错误。

至于x64版本,我甚至无法让项目构建。我收到了tlbimp错误:

TlbImp:错误TI0000:必须指定与输入类型库兼容的单个有效机器类型。

有人见过这个问题吗?

编辑:

我对此问题进行了更多的挖掘,认为这可能是Visual Studio的一个bug。我有一个干净的解决方案。我选择语言不可知的“Any CPU”导入我的COM程序集。生成的Interop DLL的进程架构是x86而不是MSIL。

暂时可能需要手动创建Interop才能使其正常工作。

如果有其他建议,请告诉我。

1个回答

49

打开 CSProj 文件并将以下节点添加到任何缺少此节点的“(Configuration)|Any CPU”节点中,即可解决此问题:

<PlatformTarget>AnyCPU</PlatformTarget>

如果此节点不存在,则 TlbImp 将默认为 x86 并导致问题。


我希望我能再点赞几次。回过头来看,错误的含义显而易见,但乍一看令人困惑。 - xcud
它起作用了,但我需要在CSProj文件中添加一个单独的<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '|AnyCPU' ">项目,以便VS开始实际使用此设置。 - Roboblob

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接