如何在本地机器禁用SVN上C#项目的指定构建事件?
如何在本地禁用C#项目中指定的构建事件?
我之前也碰到过类似的情况——直接在.csproj.user里重写<PostBuildEvent>没生效,后来才搞明白是MSBuild的属性优先级和项目文件结构导致的。下面给你几个可行的解决方案:
方案1:给要禁用的构建事件加条件判断(推荐)
这个方法不用修改主项目文件(避免提交到SVN影响其他人),只需要在本地通过.csproj.user控制开关:
- 先打开主项目的
.csproj文件,把你想禁用的那部分构建事件拆出来,加上条件判断。比如原构建事件是:
<PostBuildEvent> echo 所有环境都要执行的事件 echo 本地想禁用的事件 </PostBuildEvent>
改成:
<PostBuildEvent> echo 所有环境都要执行的事件 $(DisableLocalPostBuild) || echo 本地想禁用的事件 </PostBuildEvent>
这里的逻辑是:如果DisableLocalPostBuild为true,||前面的条件满足,后面的命令就不会执行;如果是false,就会正常执行。
- 然后打开你的
.csproj.user文件,添加一个属性来启用这个开关:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="Current" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup> <!-- 设置为true就会禁用指定的构建事件 --> <DisableLocalPostBuild>true</DisableLocalPostBuild> </PropertyGroup> </Project>
这样本地构建时,那个指定的事件就会被跳过,而提交到SVN的主项目文件完全不受影响。
方案2:确保.csproj.user的属性覆盖生效
如果之前重写<PostBuildEvent>没生效,大概率是因为主项目文件里的<PostBuildEvent>定义在.csproj.user之后加载,导致你的设置被覆盖了。可以试试:
- 打开主项目的
.csproj文件,找到<PostBuildEvent>所在的PropertyGroup,给它加上条件,让它只在没有用户设置时生效:
<PropertyGroup Condition=" '$(PostBuildEvent)' == '' "> <PostBuildEvent>原有的构建事件内容</PostBuildEvent> </PropertyGroup>
- 然后在
.csproj.user里重写整个<PostBuildEvent>,只保留你需要的部分:
<PropertyGroup> <PostBuildEvent>echo 只保留需要执行的构建事件</PostBuildEvent> </PropertyGroup>
这样MSBuild会优先使用.csproj.user里的设置,只有当用户文件里没定义时,才会用主项目的构建事件。
方案3:临时禁用(适合单次构建)
如果你只是偶尔需要禁用,不想改任何文件,可以在Visual Studio里:
- 右键项目 → 属性 → 生成事件
- 把要禁用的那行构建事件注释掉(在命令前加
rem) - 注意:改完后不要保存到主项目文件,关闭属性窗口时选择“不保存”,这样下次打开项目还是会用SVN上的配置。
内容的提问来源于stack exchange,提问作者Feofilakt
相关产品推荐
相关产品推荐

