Проект ARM отсутствует после того, как VCUpgrade изменяет версии набора инструментов

#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>

С наилучшими пожеланиями,

Коул Ву