根据编译常量更改EXE名称

时间:2011-09-21 01:33:13

标签: vb.net msbuild adobe-reader

我在VB.NET 2010中有一个项目(编译为x86,.NET 2.0运行时),我想编译成两个独立的EXE - 一个“精简”版本和一个“完整”版本。

不幸的是我不能制作两个单独的项目,因为它使用Adobe Reader COM控件 - 并且在两个项目之间使用该控件共享表单似乎混淆了IDE(与COM Interop有关,我认为 - 如果有人知道如何分享一个托管adobe reader控件的表单,这也可以解决我的问题。)

我找到了这个帖子: Change name of exe depending on conditional compilation symbol但是我没有任何MSBuild经验,所以我需要更明确的指示。

在“我的项目>编译”标签上有一个“构建活动...”按钮。我想知道是否有人知道如何设置条件编译常量并使用它来确定EXE名称(或在构建后更改它)。

如果所有其他方法都失败了,我可以手动重命名EXE,但我希望它能够自动化。

1 个答案:

答案 0 :(得分:1)

如果您的解决方案中有两个单独的项目是不可接受的,那么您将需要考虑创建自己的MSBuild脚本。

这是一个自定义MSBuild脚本的示例,它允许您在构建时定义自定义编译常量,然后构建应用程序的两个版本(“Full”和“Lite”):

<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”。
  4. 在您的项目中,您可以使用“FULL”和“LITE”条件编译常量来确定是否编译某些语句:

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