2

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

不幸的是,我不能制作两个单独的项目,因为它使用 Adob​​e Reader COM 控件-并且在两个项目之间使用该控件共享表单似乎会使 IDE 感到困惑(我认为与 COM 互操作有关-如果有人知道如何共享表单托管 adobe 阅读器控件,这也可以解决我的问题)。

我找到了这个线程: 根据条件编译符号更改 exe 的名称但是我没有任何 MSBuild 经验,所以我需要更明确的说明。

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

如果一切都失败了,我想我可以手动重命名 EXE,但我希望它是自动化的。

4

1 回答 1

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”。

在您的项目中,您可以使用“FULL”和“LITE”条件编译常量来确定是否编译某些语句:

#If FULL Then
    ' Compile code for the "Full" version.
#End If
于 2011-09-28T23:33:06.873 回答