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를 지원하는 도구)가 있다면 그것에 대해 듣고 싶습니다.
답변
x86 및 x64 용 솔루션을 빌드 하려면 두 플랫폼 모두에 대해 솔루션을 구성해야합니다. 실제로 모든 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를 짓고 있어요 BeforeTargets
및 AfterTargets
작업하지만 주에 C #을 응용 프로그램을 컴파일 CoreCompile
. (부분적으로 일종의 명령 줄 앱을 원할 수도 있고 부분적으로 생략하거나 무시하는 방법을 알 수 없기 때문에 CoreCompile
)
x86 및 x64와 같은 여러 개의 동시 바이너리를 빌드하려면 별도의 수동 빌드 작업이 필요하거나 위의 예제에서 각각 <PlatformTarget>x86</PlatformTarget>
과 <PlatformTarget>x64</PlatformTarget>
설정을 가진 두 개의 별도 프로젝트 파일이 필요합니다 .