[msbuild] MSBuild 플랫폼을 어떻게 지정합니까?

MSBuild를 사용하여 지정된 대상 플랫폼으로 솔루션을 작성하려고합니다 (x86 및 x64 바이너리가 필요합니다). 이것이 내가 시도한 방법입니다.

C:\WINDOWS\Microsoft.NET\Framework\v3.5>MsBuild SolutionPath\Solution.sln /t:Rebuild /p:Configuration=Release /p:Platform="x86"

그러나 플랫폼이 “모든 CPU”와 다른 경우 빌드는 항상 실패합니다. 내가 뭘 잘못하고 있죠?

이것은 출력 MSBuild가 출력하는 동안입니다.

C : \ WINDOWS \ Microsoft.NET \ Framework \ v3.5> MsBuild SolutionPath \ Solution.sln / t : Rebuild / p : Configuration = Release / p : Platform = “x86″Microsoft (R) 빌드 엔진 버전 3.5.30729.1 [ Microsoft .NET Framework, 버전 2.0.50727.3082] Copyright (C) Microsoft Corporation 2007. 모든 권리 보유.

빌드 시작 1.7.2010 8:28:10. 노드 0에서 “SolutionPath \ Solution.sln”프로젝트 (타겟 재 구축). SolutionPath \ Solution.sln : 오류 MSB4126 : 지정된 솔루션 구성 “Release | x86″이 잘못되었습니다. 구성 및 플랫폼 속성 (예 : MSBuild.exe Solution.sln / p : Configuration = Debug / p : Platform = “Any CPU”)을 사용하여 유효한 솔루션 구성을 지정하거나 기본 솔루션 구성을 사용하려면 해당 속성을 비워 두십시오. “SolutionPath \ Solution.sln”빌드 프로젝트 완료 (대상 재 구축)-실패했습니다.

실패를 구축하십시오.

“SolutionPath \ Solution.sln”(재 구축 대상) (1)-> (ValidateSolutionConfiguration 대상)-> SolutionPath \ Solution.sln : 오류 MSB4126 : 지정된 s olution 구성 “Release | x86″이 유효하지 않습니다. 구성 및 플랫폼 속성 (예 : MSBuild.ex e Solution.sln / p : Configuration = Debug / p : Platform = “Any CPU”)을 사용하여 유효한 솔루션 구성을 지정하거나 기본 솔루션 구성을 사용하려면 해당 속성을 비워 두십시오.

0 Warning(s)
1 Error(s)

경과 시간 00 : 00 : 00.03

devenv로 x86 / x64 용으로 빌드하려고하면 완벽하게 작동하지만 필요한 모든 버전의 Visual Studio를 설치하지 않고 빌드 서버를 설정하려고합니다. 그건 그렇고, 더 나은 무료 도구 (.NET Framework 4를 지원하는 도구)가 있다면 그것에 대해 듣고 싶습니다.



답변

x86x64 용 솔루션을 빌드 하려면 두 플랫폼 모두에 대해 솔루션을 구성해야합니다. 실제로 모든 CPU 구성이 있습니다.

프로젝트에 사용 가능한 구성을 확인하는 방법

주어진 프로젝트에 사용 가능한 구성을 확인하려면 프로젝트 파일 ( *.csproj예 :)을 열고 PropertyGroup오른쪽으로를 찾으십시오 Condition.

Release대한 모드 에서 빌드 x86하려면 프로젝트 파일에 다음과 같은 내용이 있어야합니다.

<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
  ...
</PropertyGroup>

Visual Studio에서 구성을 만들고 편집하는 방법

구성 관리자 패널
(출처 : microsoft.com )

새로운 솔루션 플랫폼 버튼
(출처 : msdn.com )

새로운 솔루션 플랫폼 패널
(출처 : msdn.com )

구성을 만들고 편집하는 방법 (MSDN)


답변

MSBuild 또는 Teamcity에서 명령 행 사용

MSBuild yourproject.sln /property:Configuration=Release /property:Platform=x64

또는 더 짧은 형식을 사용하십시오.

MSBuild yourproject.sln /p:Configuration=Release /p:Platform=x64

그러나 어쨌든 프로젝트에서 플랫폼을 설정해야합니다. Julien Hoarau의 답변을 참조하십시오.


답변

명령 행에서이 작업을 수행하려고하는 경우, 기계 전체 환경 변수 ‘플랫폼’이 설정되어 있고 사용자를 상대로 작업하는 데 문제가있을 수 있습니다. 일반 창 명령 창 대신 VS2012 명령 창을 사용하면 이것을 재현 할 수 있습니다.

명령 프롬프트에서 다음을 입력하십시오.

플랫폼 설정

VS2012 명령 창에는 ‘X64’사전 설정 값이 있습니다. 내 솔루션 파일에있는 내용을 방해하는 것 같습니다.

일반 명령 창에서 ‘set’명령은 “변수가 정의되지 않았습니다”라는 메시지를 표시합니다.

위의 ‘set’명령의 결과로 환경 변수 값이 반환되지 않으면 계속 진행하십시오.


답변

최신 핵심 라이브러리 SDK 프로젝트 파일을 사용하는 VS2017 및 2019의 경우 빌드 프로세스 중에 플랫폼을 변경할 수 있습니다. 다음 anycpu은 기본 제공 CoreCompile태스크가 실행 되기 직전에 플랫폼 으로 변경하는 예입니다 .

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

  <Target Name="SwitchToAnyCpu" BeforeTargets="CoreCompile" >
    <Message Text="Current Platform=$(Platform)" />
    <Message Text="Current PlatformTarget=$(PlatformName)" />
    <PropertyGroup>
      <Platform>anycpu</Platform>
      <PlatformTarget>anycpu</PlatformTarget>
    </PropertyGroup>
    <Message Text="New Platform=$(Platform)" />
    <Message Text="New PlatformTarget=$(PlatformTarget)" />
  </Target>

</Project>

내 경우에는, 내가 가진 FPGA를 짓고 있어요 BeforeTargetsAfterTargets작업하지만 주에 C #을 응용 프로그램을 컴파일 CoreCompile. (부분적으로 일종의 명령 줄 앱을 원할 수도 있고 부분적으로 생략하거나 무시하는 방법을 알 수 없기 때문에 CoreCompile)

x86 및 x64와 같은 여러 개의 동시 바이너리를 빌드하려면 별도의 수동 빌드 작업이 필요하거나 위의 예제에서 각각 <PlatformTarget>x86</PlatformTarget><PlatformTarget>x64</PlatformTarget>설정을 가진 두 개의 별도 프로젝트 파일이 필요합니다 .


답변