начиная с обновления моего проекта к 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 все еще хорошо работает. По-видимому, это пытается создать блок x64 interop из x86 DLL, расположенного в "C:\Assemblies". При выполнении команды TlbImp с x64 DLL, который расположен в другом каталоге, он хорошо работает. Однако я не знаю, как я могу настроить свой проект использовать различные ссылки COM для сборки x64 и x86. ОС, на которой компилируется проект, является WinXP x86. Здание хорошо работало при использовании VS2005 + MSBuild 3.5
Любая справка высоко ценилась бы.
Я пытался разработать обновленный проект с MSBuild v3.5, но это не работает также. Это жалуется на неизвестные коды NoWarn (вероятно, новый в 4,0).
Думаю, вы обнаружите, что это связано с тем, что целевая сборка должна быть скомпилирована для того же типа процессора, что и сборка проекта.
Рассматривали ли вы возможность создания двух проектов, содержащих одинаковые файлы, а затем ссылки на x64 / x86-версии вашей целевой сборки?
Это может означать наличие двух открытых экземпляров VS, но, по крайней мере, все, что вам нужно сделать, это отредактируйте, затем переключитесь и создайте.
Проблема также может быть связана с тем, что вы пытаетесь создать 64-битный код в 32-битной ОС ... Я так не думаю, насколько мне известно, только запуск кода будет проблемой.