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

在为开源项目 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 命令后传入的参数就可以是响应文件的内容。

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

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

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

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


参考资料

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

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