Как я могу получить переименованный $ (платформа) в MSbuid? - PullRequest
1 голос
/ 19 сентября 2019

У меня есть решение, которое содержит несколько переименованных платформ.По умолчанию это «Любой процессор», «x86» или «x64», но вам разрешено изменять имя платформы.Допустим, у меня есть переименованная платформа «MyPlatform1». Затем я могу сделать MSBuild myApp.sln -p:Platform=MyPlatform1 для сборки.Однако, $(Platform), который я указал в моем .csproj Condition=" '$(Platform)' == 'MyPlatform1' ", всегда дает x86.

Как получить настроенное имя платформы в моей задаче msbuild?

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <LangVersion>preview</LangVersion>
    <Platforms>AnyCPU;x86;x64</Platforms>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="ERROR.cs" Condition=" '$(Platform)' == 'MyPlatform1' " />
  </ItemGroup>

</Project>

1 Ответ

1 голос
/ 19 сентября 2019

Полагаю, вы используете команду типа msbuild xx.sln вместо msbuild xx.csproj.И это будет иметь большое значение.

Вы должны выяснить разницу между Solution Platform и Project Platform.В vs щелкните правой кнопкой мыши решение и выберите Configuration Manager, вы увидите что-то вроде:

enter image description here

Когда я использую команду: msbuild xx.sln -p:Platform=TestPlatform, так какэто решение имеет только проект ConsoleApp1, теперь оно фактически представляет команду msbuild ConsoleApp1.csproj -p:Platform=AnyCpu.Я думаю, что у вас похожая ситуация:

Обновление: Может быть, вы можете определить пользовательское свойство в xx.csproj так:

 <PropertyGroup>
    ...
    <Platforms>AnyCPU;x64;x86</Platforms>
    <RemoveOrNot>false</RemoveOrNot>
  </PropertyGroup>

  <ItemGroup>
    <Compile Remove="ERROR.cs" Condition=" '$(RemoveOrNot)' == 'true' " />
  </ItemGroup>

Это работает длятакие команды, как msbuild xx.sln -RemoveOrNot= true или msbuild xx.csproj -RemoveOrNot= true.

...