#visual-studio #msbuild #arm
#visual-studio #msbuild #arm
Вопрос:
У меня есть файл VCXPROJ из Visual Studio 2010. Файл поддерживал Win32 и x64 в течение многих лет, начиная с версии VC 5.0. Мы пытаемся добавить к нему поддержку ARM.
Мы открыли файл в текстовом редакторе и добавили следующие элементы. Сначала мы добавили ProjectConfiguration
с Debug|ARM
помощью и Release|ARM
.
<ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration>
<Platform>Win32</Platform>
</ProjectConfiguration>
...
<ProjectConfiguration Include="Debug|ARM">
<Configuration>Debug</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
<ProjectConfiguration Include="Release|ARM">
<Configuration>Release</Configuration>
<Platform>ARM</Platform>
</ProjectConfiguration>
</ItemGroup>
Во-вторых, мы добавили PropertyGroup
для ARM и защитили Globals
конфигурации:
<PropertyGroup Label="Globals" Condition="'$(Platform)'=='Win32' Or '$(Platform)'=='x64'">
<ProjectGuid>{c39f4b46-6e89-4074-902e-ca57073044d2}</ProjectGuid>
<RootNamespace>cryptlib</RootNamespace>
<PlatformToolset>v100</PlatformToolset>
<ConfigurationType>StaticLibrary</ConfigurationType>
</PropertyGroup>
<PropertyGroup Label="Globals" Condition="'$(Platform)'=='ARM'">
<ProjectGuid>{c39f4b46-6e89-4074-902e-ca57073044d2}</ProjectGuid>
<RootNamespace>cryptlib</RootNamespace>
<PlatformToolset>v110_wp80</PlatformToolset>
<MinimumVisualStudioVersion>11.0</MinimumVisualStudioVersion>
<ConfigurationType>StaticLibrary</ConfigurationType>
</PropertyGroup>
Когда мы открываем проект в Visual Studio 2012 или 2013, мы видим, что наборы инструментов проекта изменены после обновления / перенастройки:
Upgrading project 'cryptlib'...
Configuration 'DLL-Import Debug|x64': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'DLL-Import Debug|Win32': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'DLL-Import Release|x64': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'DLL-Import Release|Win32': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'Debug|Win32': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'Debug|ARM': changing Platform Toolset to 'v120' (was 'v110_wp80').
Configuration 'Debug|x64': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'Release|Win32': changing Platform Toolset to 'v120' (was 'v100').
Configuration 'Release|ARM': changing Platform Toolset to 'v120' (was 'v110_wp80').
Configuration 'Release|x64': changing Platform Toolset to 'v120' (was 'v100').
Retargeting End: 1 completed, 0 failed, 0 skipped
Однако в Configuration Manager отсутствует конфигурация ARM:
Мой первый вопрос: почему в Configuration Manager отсутствует конфигурация ARM? Что нам нужно сделать, чтобы Configuration Manager сделал выбор доступным?
Продолжаем эксперимент по поддержке ARM… Когда я захожу в приглашение разработчика Visual Studio ARM, а затем пытаюсь создать его после обновления / перенастройки:
C:UsersTest>msbuild /t:build /p:Configuration=Debug;Platform=ARM cryptlib.vcxp
roj
Microsoft (R) Build Engine version 12.0.21005.1
[Microsoft .NET Framework, version 4.0.30319.42000]
Copyright (C) Microsoft Corporation. All rights reserved.
Build started 10/15/2016 7:52:13 PM.
Project "C:UsersTestcryptlib.vcxproj" on node 1 (build target(s)).
C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120PlatformsARMPlatformToo
lsetsv120Toolset.targets(36,5): error MSB8022: Compiling Desktop applications
for the ARM platform is not supported. [C:UsersTestcryptlib.vcxproj]
Done Building Project "C:UsersTestcryptlib.vcxproj" (build target(s)) -- FAIL
ED.
Build FAILED.
"C:UsersTestcryptlib.vcxproj" (build target) (1)
->
(_WindowsSDKDesktopARMSupportInstalled target) ->
C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V120PlatformsARMPlatformT
oolsetsv120Toolset.targets(36,5): error MSB8022: Compiling Desktop application
s for the ARM platform is not supported. [C:UsersTestcryptlib.vcxproj]
0 Warning(s)
1 Error(s)
Что не совсем очевидно, так это то, что Visual Studio изменила набор инструментов платформы v110_wp8
, и раньше он работал. Как только Visual Studio изменила его v120
, он больше не работал.
Мой второй вопрос: что происходит с Visual Studio? Почему он принимает «хорошую» конфигурацию и превращает ее в «плохую»?
Комментарии:
1. 1) Если вы открываете проект в VS2012 без обновления, показывает ли он конфигурации ARM? 2) Было бы полезно посмотреть, как выглядит проект после обновления. Возможно, путь автоматического обновления с v110_wp80 на v120_wp81 или что-то еще не поддерживается / не работает или, возможно, VS плохо работает с условной глобальной группой свойств. Поскольку вы все равно повторяете более половины, вы можете попытаться использовать его безоговорочно и вместо этого переопределить только необходимые свойства на основе платформы.
Ответ №1:
Мой первый вопрос: почему в Configuration Manager отсутствует ARM
конфигурация? Что нам нужно сделать, чтобы Configuration Manager сделал выбор доступным?
Мы могли бы использовать Configuration Manager для добавления платформы arm (Configuration Manager-> из списка активных платформ решений -> Добавить -> выбрать Arm-> OK).
Мой второй вопрос: что происходит с Visual Studio? Почему он принимает «хорошую» конфигурацию и превращает ее в «плохую»?
Я создаю демонстрационную версию и воспроизводю вашу проблему на своей стороне, кажется, что vs2012 (то же самое с vs2013 и vs2015) по умолчанию не поддерживает платформу arm, вы можете отредактировать файл, чтобы открыть функцию (требуются права администратора):
C:Program Files (x86)MSBuildMicrosoft.Cppv4.0V110PlatformsARMMicrosoft.Cpp.ARM.Common.props
В <PropertyGroup>
разделе добавьте строку:
<WindowsSDKDesktopARMSupport>true</WindowsSDKDesktopARMSupport>
перед </PropertyGroup>
С наилучшими пожеланиями,
Коул Ву