MSBuild: ошибка TlbImp с момента обновления до VS 2010 - PullRequest
11 голосов
/ 10 мая 2010

после обновления моего проекта до 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 из библиотеки x86, расположенной в «C: \ Assemblies». При выполнении команды TlbImp с библиотекой x64, которая находится в другом каталоге, она работает нормально. Однако я не знаю, как настроить свой проект для использования различных ссылок COM для сборки x86 и x64. Операционная система, в которой выполняется компиляция проекта, - WinXP x86. Сборка работала нормально при использовании VS2005 + MSBuild 3.5

Любая помощь будет принята с благодарностью.

Я пытался создать обновленный проект с MSBuild v3.5, но это тоже не работает. Он жалуется на неизвестные коды NoWarn (вероятно, новые в 4.0).

Ответы [ 4 ]

2 голосов
/ 07 июля 2013

Я наконец-то придумал «решение». Как указано в MS Connect , изменение в поведении сборки x64 было преднамеренным. Начиная с VS2010 и более поздних версий для сборки приложения x64 требуется система сборки x64, поэтому я был вынужден обновить систему сборки до x64 (что в основном означает переустановку всего). Затем для сборки x64 необходимо использовать версию MSBuild для x64, которая находится в папке «Framework64» (подробнее см. В блоге Visual Studio : построение сценариев перекрестного таргетинга и 64-разрядной MSBuild * 1004). *).

2 голосов
/ 14 апреля 2011

У нас была похожая проблема с ссылками на com для x64 (но с другим сообщением об ошибке), и оказалось, что AnyCPU отсутствует в файле проекта (похоже на комментарий Адама Дрисколла). Это означало, что взаимодействие x86 использовалось для обеих сборок x86 и x64.

В файле csproj добавьте этот узел под каждым узлом. При создании проекта создается / используется независимое взаимодействие с платформой.

1 голос
/ 08 апреля 2011

Это может быть связано с проблемой в вашем проекте, где отсутствует целевой узел платформы: Проблема 64-битного взаимодействия с Visual Studio 2010

Не совсем уверен, если это та же проблема ...

0 голосов
/ 19 мая 2010

Я думаю, вы поймете, что это потому, что целевая сборка должна быть скомпилирована для того же типа процессора, что и сборка проекта.

Рассматривали ли вы наличие 2 проектов, содержащих одинаковые файлы, а затем ссылались на версии x64 / x86 вашей целевой сборки в них?

Это может означать, что открыто 2 экземпляра VS, но по крайней мере все, что вам нужно сделать, это отредактировать, а затем переключиться и построить.

Проблема также может заключаться в том, что вы пытаетесь создать 64-битный код на 32-битной ОС ... Хотя я так не думаю, насколько мне известно, только запуск кода будет проблемой. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...