由于我将项目升级到VS2010,包括使用MSBuild v4而不是3.5 (并且没有做任何其他更改),我得到了以下构建错误,并且不知道如何修复它(来自CC.NET的日志):
<target name="ResolveComReferences" success="false">
<message level="high"><![CDATA[C:\Programme\Microsoft SDKs\Windows\v7.0A\bin\TlbImp.exe c:\Assemblies\NMSDVDXU.dll /namespace:NMSDVDXLib /machine:X64 /out:obj\x64\Release\Interop.NMSDVDXLib.dll /sysarray /transform:DispRet /reference:c:\Assemblies\Bass.Net.dll /reference:c:\Assemblies\LogicNP.FileView.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Management.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll ]]></message>
<error code="TI0000" file="TlbImp"><![CDATA[A single valid machine type compatible with the input type library must be specified.]]></error>
<warning code="MSB3283" file="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets" line="1558" column="9"><![CDATA[Die Wrapperassembly für die Typbibliothek "NMSDVDXLib" wurde nicht gefunden.]]></warning>
<message level="high"><![CDATA[C:\Programme\Microsoft SDKs\Windows\v7.0A\bin\TlbImp.exe c:\Assemblies\StarBurnX12.dll /namespace:RocketDivision.StarBurnX /machine:X64 /out:obj\x64\Release\Interop.RocketDivision.StarBurnX.dll /sysarray /transform:DispRet /reference:c:\Assemblies\Bass.Net.dll /reference:c:\Assemblies\LogicNP.FileView.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\mscorlib.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Management.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll ]]></message>
<error code="TI0000" file="TlbImp"><![CDATA[A single valid machine type compatible with the input type library must be specified.]]></error>
<warning code="MSB3283" file="C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets" line="1558" column="9"><![CDATA[Die Wrapperassembly für die Typbibliothek "RocketDivision.StarBurnX" wurde nicht gefunden.]]></warning>
</target>问题:必须指定与输入类型库兼容的单个有效计算机类型。
它只适用于我的项目的x64构建,x86仍然工作得很好。显然,它试图从位于“C:\ x64”中的x86 DLL构建一个x86互操作程序集。当对位于不同目录中的x64 DLL执行TlbImp命令时,它工作正常。但是,我不知道如何将我的项目配置为对x86和x64版本使用不同的COM引用。正在编译项目的操作系统是WinXP x86。使用VS2005 + MSBuild 3.5时,构建工作正常
任何帮助都将不胜感激。
我尝试使用MSBuild v3.5构建升级后的项目,但也不起作用。它抱怨未知的NoWarn代码(可能是4.0中的新代码)。
发布于 2013-07-07 16:56:40
我终于想出了“解决方案”。正如MS Connect上指出的,x64构建行为的改变显然是故意的。在VS2010和更高版本中,您的应用程序的x64构建需要x64构建系统,因此我被迫将构建系统升级到x64 (这基本上意味着重新安装所有内容)。然后,对于x64构建,您必须使用MSBuild的x64版本,该版本位于"Framework64“文件夹中(有关Visual Studio blog: Building on Cross targeting scenarios and 64-bit MSBuild的更多详细信息)。
发布于 2011-04-14 19:02:23
我们在x64的com引用中遇到了类似的问题(但错误消息不同),结果发现项目文件中缺少AnyCPU (类似Adam Driscoll的注释)。这意味着在x86和x64构建中都使用了x86互操作。
在csproj文件中,将此节点添加到每个节点下。在构建项目时,将创建/使用独立于平台的互操作。
发布于 2011-04-08 09:43:39
这可能是由于缺少平台目标节点的项目问题造成的:Visual Studio 2010 64-bit COM Interop Issue
不太确定这是不是同样的问题...
https://stackoverflow.com/questions/2804223
复制相似问题