2011-09-21 47 views
2

我在VB.NET 2010(編譯爲x86,.NET 2.0運行時)中有一個項目,我想將它編譯爲兩個單獨的EXE - 「精簡版」和「完整」版本。基於編譯常量更改EXE名稱

不幸的是,我不能做兩個單獨的項目,因爲它使用Adobe Reader COM控件 - 並且在兩個項目之間使用該控件共享一個窗體似乎混淆了IDE(與COM Interop有關,我假設 - 如果有人知道如何共享一個託管adobe reader控件的表單,這也可以解決我的問題)。

我發現此線程: Change name of exe depending on conditional compilation symbol但是,我沒有任何MSBuild的經驗,所以我需要更明確的指示。

在「我的項目>編譯」選項卡上有一個「生成事件...」按鈕。我想知道是否有人知道如何設置條件編譯常量並使用它來確定EXE名稱(或在構建之後更改它)。

如果一切都失敗了,我可以手動重命名EXE,但我更喜歡它是自動的。

回答

1

如果在解決方案中有兩個單獨的項目是不可接受的,那麼您需要考慮創建自己的MSBuild腳本。

這裏是一個自定義的MSBuild腳本,讓你在構建時定義自定義編譯常量,然後建立自己的應用程序(「全」和「精簡版」)你的兩個版本的例子:

<Project DefaultTargets="BuildAll" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <BuildVersionFull>FULL</BuildVersionFull> 
    <BuildVersionLite>LITE</BuildVersionLite> 
    </PropertyGroup> 
    <ItemGroup> 
    <Projects Include="$(MSBuildProjectDirectory)\MyApp.vbproj" /> 
    </ItemGroup> 
    <Target Name="BuildAll" DependsOnTargets="BuildFull;BuildLite" /> 
    <Target Name="BuildFull"> 
    <MSBuild Projects="@(Projects)" Properties="DefineConstants=$(BuildVersionFull);OutputPath=binFull\;BaseIntermediateOutputPath=objFull\;AssemblyName=MyApp_Full" /> 
    </Target> 
    <Target Name="BuildLite"> 
    <MSBuild Projects="@(Projects)" Properties="DefineConstants=$(BuildVersionLite);OutputPath=binLite\;BaseIntermediateOutputPath=objLite\;AssemblyName=MyApp_Lite" /> 
    </Target> 
</Project> 

你需要什麼做:

  1. 創建一個新的文件,並保存在同一目錄中應用程序的項目文件爲「MyBuild.xml」。
  2. 更改以反映應用程序項目文件的名稱。
  3. 打開Visual Studio命令提示符並運行「msbuild」。

在你的項目,你可以使用「FULL」和「LITE」條件編譯常數,以確定是否要編譯某些語句:

#If FULL Then 
    ' Compile code for the "Full" version. 
#End If 
+0

您也可以直接在Visual Studio中運行的MSBuild描述這裏:http://www.kodefuguru.com/post/2010/04/10/MSBuild-as-a-Visual-Studio-2010-Tool.aspx –

+0

謝謝你會試試 – SSS