2012-11-16 1 views
1

나는 C# 프로젝트를 가지고 있으며 솔루션에서 플랫폼 대상은 AnyCPU입니다. 매일이 솔루션을 빌드하고 msbuild.exe를 사용하는 빌드 프로그램이 있습니다. 이 명령은 추천했습니다 :msbuild.exe로 C# 프로젝트를 빌드해도 프로젝트 대상 플랫폼 구성을 덮어 쓰지 않으십니까?

MSBuild에서 D를 : \ my.sln/P : 구성 = 릴리스/P : 플랫폼 = 86/t : .... 다시

는 여기에 컴파일 된 플랫폼은 86해야 지정합니다.

제 의견으로는 msbuild.exe는 솔루션 구성을 덮어 써야하고 출력은 anyCPU 유형 대신 x86 exe 여야합니다.

나는이 프로젝트에 다음 코드를 시도 :

 PortableExecutableKinds peKind; 
     ImageFileMachine machine; 

     Assembly.GetExecutingAssembly().ManifestModule.GetPEKind(out peKind, out machine); 

시험 결과는 제안 exe 인은 anycpu를 모드 (ILONLY)이다,하지 무엇을 기대했다. 그런 상황에서 어떻게 프로그램을 x86이나 x64로 코드별로 컴파일 할 수 있습니까?

감사합니다. 리

답변

1

는 내가의 .sln 파일을 작성하지만 사용

<?xml version="1.0" encoding="utf-8"?> 
<Project ToolsVersion="4.0" DefaultTargets="Deploy" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 


<Target Name="BuildProjects" > 

    <ItemGroup>  
     <BuildProjectsInputFiles Include="**\MainProject\*.??proj" /> 
     <BuildProjectsInputFiles Include="**\AnotherProject\*.??proj" /> 
    </ItemGroup> 

    <MSBuild Projects="@(BuildProjectsInputFiles)" Properties="Configuration=$(Configuration);OutputPath=$(MSBuildProjectDirectory)\Deploy\bin\%(BuildProjectsInputFiles.FileName)"> 
     <Output TaskParameter="TargetOutputs" 
       ItemName="BuildProjectsOutputFiles" /> 
    </MSBuild> 

</Target> 

</Project> 

지금 나는이 호출은 MSBuild를 사용 MSBuild.exe를 함께 약간의 빌드 스크립트를 사용하지 않으

msbuild.exe build.xml /p:OutputPath=bin\Debug;Configuration=Release;Platform=x86 /target:BuildProjects 

그리고 작품이

+0

감사합니다. SchlaWiener. 방금 내 게시물을 업데이트합니다. 내 영토 밖이기 때문에 빌드 스크립트를 수정할 수 없습니다. 그래서 내 질문에 줄이기 어떻게 x86/x64 정보를 코드로 얻을 수 있습니까? 테스트 후/p : Platform = x86 또는/p : Platform = x64 인 i 컴파일러의 경우 실제 dll이 다릅니다 (x64 컴파일 된 프로그램에서 x64 컴파일 된 프로그램에서 오류가 발생 함). peKind = ILOnly . – DingLi

+0

x86/x64 프로세스에서 다른 'IntPtr.Size'를 확인하십시오. –