c# - 带有 DefineConstants 的解决方案文件的 MsBuild

标签 c# visual-studio-2008 msbuild

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

devenv /build myproject1.sln

现在,我想为我的应用程序创建两个版本,普通版和轻量版。这两个版本的源代码是一样的,只是在轻版本中禁用了一些功能,为此我使用了#define lite。预处理器指令(在 csproject 文件中,这些常量在 DefineConstants 属性组下定义)。

在 MsBuild 中——或者只是正常的 devenv 构建——是否可以指定我想要的符号是否应该出现在构建中?我问这个的原因是因为我想第一次使用 lite 预处理器指令(对于精简版)构建我的 sln 文件,第二次,没有 lite 预处理器指令(完整版)。

最佳答案

在您的项目文件中为精简版添加新的PropertyGroup部分

<PropertyGroup Condition="'$(LiteVersion)'=='true'">
   <DefineConstants>$(DefineConstants);lite</DefineConstants>
</PropertyGroup>

DefineConstants 的所有定义中删除 lite

MSBuild.exe  myprojeect1.sln
MSBuild.exe  myprojeect1.sln /p:LiteVersion=true

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

set LiteVersion=true
devenv.exe myproject1.sln

关于c# - 带有 DefineConstants 的解决方案文件的 MsBuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5049323/

相关文章:

msbuild - 使用 TeamCity 构建和部署特定的修订号

c# - 在添加到字符串之前捕获空值

c++ - 系统函数似乎忽略了引号

visual-studio-2008 - Visual Studio 中的有序单元测试有什么意义?

msbuild - 批处理脚本 - 如果成功,将 msbuild 输出转储到特定文件而不是控制台窗口?

c# - 包含非 null 元素的列表最终包含 null。同步问题?

c# - IDisposable 的接口(interface)继承?

C# Entity Framework .ToList() 但 CA1002 : Use Collection

C# - 在任务栏上鼠标悬停时,会生成预览。我怎样才能通过 C# 编码实现这个

c# - 构建 C# MVC 5 站点时项目之间的处理器架构不匹配