programing

MSBuild를 32비트 모드로 컴파일하려면 어떻게 해야 합니까?

goodsources 2023. 5. 11. 21:25
반응형

MSBuild를 32비트 모드로 컴파일하려면 어떻게 해야 합니까?

MSBuild(NAT을 통해)를 사용하여 여러 VB를 컴파일하고 있습니다.NET 어셈블리.이러한 어셈블리는 COM Interop에 의존하기 때문에 64비트 OS에서 32비트 모드로 실행되어야 합니다.Visual Studio에서 프로젝트를 변경하여 실행 파일 어셈블리를 32비트로 컴파일할 수 있지만 빌드 서버에서 모든 실행 파일을 32비트 모드로 강제 컴파일할 수 있습니다.

MSBuild를 위해 여러 명령줄 매개 변수를 시도했지만 실패했습니다.

  • /p:Platform=win32
  • /p:Platform=x86
  • /p:프로세서 아키텍처=x86

내가 뭘 잘못하고 있는 거지?MSBuild가 VB 프로젝트를 컴파일할 때 사용하는 속성에 대한 참조가 있습니까?

MSDN에 따르면, 당신은 옳은 일을 하고 있습니다.처럼 보인다/p:Platform=x86하지만 사실, 아마도./p:PlatformTarget=x86.

해당 매개 변수를 사용하여 MSBuild를 직접 호출합니다(NAT 파일에 문제가 없는지 확인).올바른 빌드 구성(디버그/릴리스)에 대한 빌드 출력을 확인합니다.

어셈블리 자체가 항상 32비트일 것이라면 설정을 .vbproj 파일에 추가하는 것이 어떻습니까?그렇게 하면 MSBuild는 고려 대상에서 제외됩니다.

.vbproj 파일의 초기 속성 그룹에 다음 행을 추가하기만 하면 됩니다.

<PlatformTarget>x86</PlatformTarget>

이것이 도움이 될 경우를 대비하여 x86 플랫폼 대상을 구축하기 위해 다음 명령줄을 사용했습니다.

C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe my.sln /t:build /p:Configuration=Release;Platform=x86

솔루션 탐색기에서 루트 노드 → 구성 관리자를 마우스 오른쪽 버튼으로 누르십시오.내의 각 프로젝트를 32비트로 빌드하도록 지시하는 솔루션 전체 구성을 정의해야 합니다. (참고: 하나 이상의 프로젝트를 32비트로 빌드하도록 설정한 경우 이미 하나가 있을 수 있습니다.)단계별 설명은 MSDN 블로그 포스트 솔루션 구성을 참조하십시오.

그런 다음 팀 빌드에서 원하는 "플랫폼"과 "맛"을 지정합니다. .proj/.targets파일. 예:

<ConfigurationToBuild Include="Release|x86">
    <FlavorToBuild>Release</FlavorToBuild>
    <PlatformToBuild>x86</PlatformToBuild>
</ConfigurationToBuild>

이러한 속성 섹션을 둘 이상 지정하여 여러 조합을 빌드할 수 있습니다."Release|x86" 문자열(또는 모양이 무엇이든)을 직접 복사/붙여넣습니다..sln파일이 정확하게 일치하는지 확인합니다. Solution Explorer에서 직접 가져올 수 없습니다.

귀하의 의견과 관련하여:

MSBuild 속성 평가는 선언적 스타일과 명령적 스타일을 혼합하기 때문에 매우 복잡합니다.자세한 내용은 블로그 게시물 MSBuild Property Evaluation을 참조하십시오.나는 그것의 섬세함에 의존하지 않는 것을 선호합니다.

명령줄에 지정된 속성이 다른 모든 속성보다 우선해야 하는 것은 사실이지만, Team Build에는 또 다른 복잡성 계층이 있습니다.ComputeConfigurationList 태스크는 일반 태스크가 아닌 재귀적 MSBuild 호출을 통해 반복적으로 호출됩니다.이것을 끌어내는 방법은 다음과 같은 평범한 특성을 취하는 것입니다.PlatformToBuild라고 불리는 글로벌 속성 집합으로 포장합니다.ConfigurationToBuild.PlatformToBuild(등) 각 구성에 대해 한 번씩 즉시 생성됩니다.이렇게 하면 Team Build 엔진이 내부적으로 훨씬 더 유연해질 뿐만 아니라 원하는 명령줄 동작을 해킹하는 것이 더 어려워집니다.

은 설을시도볼있다수니습해정다를 설정해 볼 수 .ConfigurationToBuild.PlatformToBuild명령행에 직접 연결할 수 있습니다. 작동할지도 모르겠습니다.그러나 단일 빌드 정의에서 두 개 이상의 구성을 빌드할 수는 없습니다.이러한 이유로, 저는 위의 조언을 고수하고 있습니다.

MSBuild 버전 15의 경우 /p:PlatformTarget=x86

문제가 한 후 저는 했습니다.C:\WINDOWS\Microsoft.NET\Framework64까지의 C:\WINDOWS\Microsoft.NET\Framework(아니오64이 잘 정리되었습니다 그리고 일들이 잘 정리되었습니다.

이 질문에 대한 Nantmsbuild-Task 답변:

<msbuild project="your.sln">
    <property name="PlatformTarget" value="x86" />
</msbuild>

올바른 속성을 찾기 위해 사용하는 더 실용적인 방법은 c#의 경우 .csproj 프로젝트 파일 중 하나를 열고 Visual stdio에서 "x64" / "AnyCPU" / "x86"을 선택할 때 영향을 받는 속성을 보는 것입니다.변경된 속성은 명령줄에서 설정해야 합니다.Visual studio 2015에서는 <플랫폼>인 것 같습니다.따라서 /p: 인수를 사용하여 msbuild를 호출할 수 있습니다.Platform=x64 및 작동해야 합니다.

언급URL : https://stackoverflow.com/questions/1074654/how-do-i-force-msbuild-to-compile-for-32-bit-mode

반응형