带有DefineConstants的解决方案文件的MsBuild

Gra*_*ton 16 c# msbuild visual-studio-2008

目前,在我的自动构建中,我使用devenv.exe来构建我的解决方案文件:

devenv /build myproject1.sln
Run Code Online (Sandbox Code Playgroud)

现在,我想创建我的应用程序的两个版本,正常版本和轻量版本.这两个版本的源代码是相同的,只是在轻型版本中,某些功能被禁用,为此我使用#define lite预处理器指令(在csproject文件中,这些常量在DefineConstantsProperty Group 下定义).

在MsBuild中 - 或者只是正常的devenv构建 - 是否可以指定我想要的符号是否应该存在于构建中?我问这个的原因是因为我想slnlite预处理器指令(对于lite版本)第一次构建我的文件,第二次是没有lite预处理器指令(对于完整版本).

Ser*_*kov 29

在项目文件中为lite版本添加新的PropertyGroup部分

<PropertyGroup Condition="'$(LiteVersion)'=='true'">
   <DefineConstants>$(DefineConstants);lite</DefineConstants>
</PropertyGroup>
Run Code Online (Sandbox Code Playgroud)

DefineConstants的所有定义中删除lite.

MSBuild.exe  myprojeect1.sln
MSBuild.exe  myprojeect1.sln /p:LiteVersion=true
Run Code Online (Sandbox Code Playgroud)

您可以在VS中创建其他配置以在版本之间切换.但是当您忘记向lite配置添加标志时,它可能会导致配置不匹配.我可以建议更优雅的解决方案.创建.bat文件或更改链接以运行myproject1.sln:

set LiteVersion=true
devenv.exe myproject1.sln
Run Code Online (Sandbox Code Playgroud)