使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数

使用 MSBuild 响应文件 (rsp) 来指定 dotnet build 命令行编译时的大量参数

发布于 2018-04-03 11:51 更新于 2018-09-01 00:12

在为开源项目 dotnet-campus/MSTestEnhancer 进行持续集成编译时,需要在编译命令中传入较多的参数。这对于新接手此项目的人来说,成本还是高了一点儿。本文将介绍 MSBuild 响应文件 (MSBuild Response Files, *.rsp) 来优化命令行编译体验。


我们在 msbuild 命令中加入 /? 参数可以看到它对响应文件的解释:

> dotnet build /?

# 省略了一部分输出,只保留响应文件相关的两个。
@<file>             从文本文件插入命令行设置。若要指定
                    多个响应文件,请分别指定每个响应
                    文件。

                    自动从以下位置使用任何名为 "msbuild.rsp" 的
                    响应文件:
                    (1) msbuild.exe 的目录
                    (2) 生成的第一个项目或解决方案的目录
/noautoresponse     不自动包括任何 MSBuild.rsp 文件。(缩写:
                    /noautorsp)

当然,使用 dotnet msbuild 或者直接使用 msbuild.exe 都是一样的具备此功能。

那么响应文件到底是什么呢?我们在 dotnet build 命令后传入的参数就可以是响应文件的内容。

  • 响应文件以 .rsp 扩展名结尾,放在任何地方就行,只需要在 dotnet build 命令中用 @ 指定即可。
  • 也可以用预定的文件名 Directory.Build.rsp,放在 sln 同级目录或者父级目录中。

比如,在这个项目中,我直接在解决方案同级目录中新建了 Directory.Build.rsp 文件,并写入这些内容:

/p:Configuration=Release
/maxcpucount
/p:Version=1.6.0-beta
/p:AssemblyVersion=1.6.0.0

这样,当执行命令 dotnet builddotnet msbuild 时,将执行这些事情:

  • 使用 Release 配置进行编译
  • 当前计算机有多少 CPU 核,就使用多少个进程进行并行编译
  • NuGet 包打包版本设置为 1.6.0-beta(这将覆盖 csproj 中设置的 Version 属性)
  • 程序集版本设置为 1.6.0。0(这将覆盖 csproj 中设置的 AssemblyVersion 属性)

当然,还可以写更多的事情,但命令依旧简单——对新开发者是非常友好的。


参考资料

本文会经常更新,请阅读原文: https://walterlv.com/post/msbuild-response-files.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名 吕毅 (包含链接: https://walterlv.com ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系 (walter.lv@qq.com)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏jessetalks

ASP.NET安全

ASP.NET 安全 概述   安全在web领域是一个永远都不会过时的话题,今天我们就来看一看一些在开发ASP.NET MVC应用程序时一些值得我们注意的安全问...

54680
来自专栏python爬虫日记

wing ide 6.0 注册

wing ide ,用过python的都知道是干嘛用的了吧,官网已经更新到6.0.0-1版本。

13650
来自专栏深度学习那些事儿

最新VS for Mac离线安装教程汇总!

VS大家都知道,大名鼎鼎的Visual Studio、功能强大的IDE,这里汇集了VS在mac OS系统上的各种下载方式和下载步骤,博主被折腾的死去活来于是会对...

1.1K30
来自专栏Hellovass 的博客

真·Android Studio 代理设置指南

shadowsocks 在 windows 上是支持 socks 代理和 http 代理,但在 OSX 上只是支持 socks5 代理,属于局部代理。Andro...

77340
来自专栏葡萄城控件技术团队

如何在 ASP.NET MVC 中集成 AngularJS(1)

介绍 当涉及到计算机软件的开发时,我想运用所有的最新技术。例如,前端使用最新的 JavaScript 技术,服务器端使用最新的基于 REST 的 Web API...

36860
来自专栏信安之路

PowerShell 降级攻击的检测与防御

在第一部分中,我提供了 PowerShell 的高级概述及其对网络的潜在风险。 当然,如果我们有追踪机制,那么只能缓解一些 PowerShell 攻击,假设我们...

18200
来自专栏开发与安全

学习 Android Application Security Series 时需要注意的一些点

最近想扩展学习下 Android 应用安全,找到一份入门指引  ,大概走了一遍,有一些注意的点且记下。 1. 建议下载的 Appie 版本为 2.0,因为作者写...

20000
来自专栏张善友的专栏

Using the OData Ajax library

2010年3月份的msdn杂志上有篇文章是介绍Asp.Net Ajax 调用WCF Data Service的,也就是Using the OData Ajax ...

20350
来自专栏Jerry的SAP技术分享

谣言粉碎机 - 极短时间内发送两个Odata request,前一个会自动被cancel掉?

有时我们能在Chrome开发者工具的Network tab里观察到SAP UI5应用会发出某些状态为"取消"的OData请求。如下图第五个请求。

209100
来自专栏张善友的专栏

.NET Core 系列5 :使用 Nuget打包类库

NuGet是个开源项目,项目包括 NuGet VS插件/NuGet Explorer/NuGetServer/NuGet命令行等项目,.NET Core项目完全...

28550

扫码关注云+社区

领取腾讯云代金券