我在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,但我希望它能够自动化。
答案 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>
您需要做什么:
在您的项目中,您可以使用“FULL”和“LITE”条件编译常量来确定是否编译某些语句:
#If FULL Then
' Compile code for the "Full" version.
#End If