2012-11-16 82 views
1

我有一個C#項目,在解決方案中,平臺目標是AnyCPU。雖然我有一個構建程序,每天都會構建此解決方案,並使用msbuild.exe。該命令喜歡:使用msbuild.exe構建C#項目不會覆蓋項目目標平臺配置?

的MSBuild d:\ my.sln/P:配置=釋放/ P:平臺= 86/T:重建....

這裏我指定的編譯平臺應該是x86。

我我認爲,msbuild.exe應該覆蓋解決方案配置和輸出應該是x86 EXE,而不是anyCPU類型。

我嘗試這些代碼到這個項目:

 PortableExecutableKinds peKind; 
     ImageFileMachine machine; 

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

測試結果表明,該exe值爲anycpu模式(ILONLY),而不是我們所期望的。 在這樣的情況下,我怎麼能知道我的程序編譯器由x86或x64編碼?

謝謝。 李

回答

1

我寧願不建.sln文件,但使用用一個小構建腳本與msbuild.exe

<?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 build.xml /p:OutputPath=bin\Debug;Configuration=Release;Platform=x86 /target:BuildProjects 

這作品

+0

謝謝SchlaWiener。我只是更新我的帖子。我無法修改構建腳本,因爲那是在我的領土之外。所以我的問題縮小到如何通過代碼獲取x86/x64信息?經過測試,如果我使用/ p:Platform = x86或/ p:Platform = x64進行編譯,dll實際上是不同的(我嘗試在x64編譯的程序中動態加載x86 .net dll,發生錯誤),無論peKind = ILOnly 。 – DingLi

+0

檢查對於x86/x64進程應該不同的'IntPtr.Size'。 –