Vb.net 基于编译常量更改EXE名称

Vb.net 基于编译常量更改EXE名称,vb.net,msbuild,adobe-reader,Vb.net,Msbuild,Adobe Reader,我在VB.NET 2010中有一个项目(编译到x86.NET 2.0运行时),我想将它编译成两个单独的EXE版本——“lite”版本和“完整”版本 不幸的是,我不能创建两个单独的项目,因为它使用Adobe Reader COM控件,而在两个项目之间共享使用该控件的表单似乎会混淆IDE(我认为这与COM互操作有关,如果有人知道如何共享承载Adobe Reader控件的表单,这也会解决我的问题) 我发现了这个线索: 但是,我没有任何MSBuild经验,因此需要更明确的说明 在“我的项目>编译”选项卡

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

不幸的是,我不能创建两个单独的项目,因为它使用Adobe Reader COM控件,而在两个项目之间共享使用该控件的表单似乎会混淆IDE(我认为这与COM互操作有关,如果有人知道如何共享承载Adobe Reader控件的表单,这也会解决我的问题)

我发现了这个线索: 但是,我没有任何MSBuild经验,因此需要更明确的说明

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


如果所有其他方法都失败,我想我可以手动重命名EXE,但我希望它是自动的。

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

以下是自定义MSBuild脚本的示例,该脚本允许您在生成时定义自定义编译常量,然后生成应用程序的两个版本(“完整”和“精简”):


您还可以直接在Visual Studio中运行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>
#If FULL Then
    ' Compile code for the "Full" version.
#End If