Подтвердить что ты не робот

Как заставить MSBuild компилироваться для 32-битного режима?

Я использую MSBuild (через NAnt), чтобы скомпилировать кучу VB.NET. Поскольку эти сборки зависят от COM Interop, я должен гарантировать, что они будут работать в 32-разрядном режиме на 64-битных ОС. Я могу собрать исполняемые сборки, чтобы скомпилировать их до 32-битных, изменив проект в Visual Studio, но мне бы очень хотелось, чтобы все исполняемые файлы были скомпилированы в 32-битный режим на сервере сборки.

Я пробовал несколько параметров командной строки для MSBuild без везения:

  • /р: Платформа = win32
  • /р: Платформа = x86
  • /р: ProcessorArchitecture = х86

Что я делаю неправильно? Есть ли ссылка на свойства, которые использует MSBuild при компиляции проектов VB?

4b9b3361

Ответ 1

Если сами сборки всегда будут 32 бит, почему бы не добавить параметр в файл .vbproj? Это выведет MSBuild из уравнения.

Просто добавьте следующую строку в исходную PropertyGroup в файле .vbproj.

<PlatformTarget>x86</PlatformTarget>

Ответ 2

Согласно MSDN, вы поступаете правильно. Похож на /p:Platform=x86, но на самом деле, может быть, он /p:PlatformTarget=x86.

Попробуйте просто вызвать MSBuild непосредственно с этим параметром (убедитесь, что это не проблема с вашим файлом NAnt. Посмотрите на вывод сборки для правильной конфигурации сборки (Debug/Release).

Ответ 3

На всякий случай это помогает, я использовал эту командную строку для создания моей платформы платформы x86:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

Ответ 4

В обозревателе решений щелкните правой кнопкой мыши root node → Configuration Manager. Вам необходимо определить конфигурацию решения, которая инструктирует каждый проект внутри строить как 32-битный. (Примечание: у вас, вероятно, уже есть один, если вы когда-либо устанавливали хотя бы один проект для сборки как 32-разрядный.) Пошаговое руководство по обходу см. В сообщении блога MSDN Конфигурации решений.

Затем вы указываете желаемую "платформу" и "аромат" в Team Build .proj/.targets файлах. Например:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

Вы можете указать более одного из этих разделов свойств для создания нескольких комбинаций. Я бы скопировал/вставил строку "Release | x86" (или что-то вроде этого) непосредственно из вашего файла .sln, чтобы убедиться, что он точно соответствует - вы не можете получить его непосредственно из Solution Explorer.

Относительно вашего комментария:

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

Верно, что свойства, указанные в командной строке, должны переопределять все остальное, но Team Build имеет еще один уровень сложности. Задача ComputeConfigurationList вызывается многократно через рекурсивную инсталляцию MSBuild, а не как обычную задачу. То, как он тянет это, - это взять обычные свойства, такие как PlatformToBuild, и обернуть их в набор глобальных свойств, называемых ConfigurationToBuild.PlatformToBuild (и т.д.), Которые генерируются "на лету" один раз для каждой конфигурации. Это делает двигатель Team Build более гибким, но он также взламывает поведение командной строки, которое вам нужно сложнее.

Вы можете попробовать установить ConfigurationToBuild.PlatformToBuild в командной строке напрямую - это может сработать, я не уверен. Но это определенно помешает вам создавать более одной конфигурации в одном определении сборки. По этой причине я придерживаюсь своего совета выше.

Ответ 5

После того, как вы столкнулись с одной и той же проблемой, я переключился с версии MSBuild на C:\WINDOWS\Microsoft.NET\Framework64... на версию в C:\WINDOWS\Microsoft.NET\Framework (no 64), и все было скомпилировано просто.

Ответ 6

Ответ Nant msbuild-Task на этот вопрос:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

Ответ 7

Для MSBuild версии 15 это /Р: PlatformTarget = х86