MSBuild

引言

使用 Visual Studio IDE 开发项目时,我们会很自然的 运行/F5 / 右键项目-生成/重新生成/清理,然后就可以看到对应的结果了.

这些结果通常是:

  • 一些可执行文件, .dll/.exe
  • 一些弹出的 Console 控制台界面
  • 一些网页
  • 一些窗体
  • ...

但是为什么点击上述的一些操作按钮后,就会出现这样的结果呢?

或者说点击上述的操作按钮后,中间发生了什么?

答案是:MSBuild

MSBuild.exe 路径

通常情况下, 指定版本的 .NET Framework 中内置了 MSBuild.exe :

  • C:\Windows\Microsoft.NET\Framework\v2.0.50727\MSBuild.exe
  • C:\Windows\Microsoft.NET\Framework\v3.5\MSBuild.exe
  • C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe
  • ...

如果你还安装了 Visual Studio 2017 的话, Visual Studio 2017 中也内置了一个 MSBuild.exe ,路径如下:

  • D:\Program Files (x86)\Microsoft Visual Studio\2017\Community\MSBuild\15.0\Bin\MSBuild.exe

Tips: MSBuild.exe 路径通常对于需要手动/自动执行构建任务的小伙伴有所帮助.

使用实例

Tips: 据说在 Visual Studio 中通过调整工具-选项-项目和解决方案-生成并运行中的MSBuild 项目生成输出详细信息列表选项为普通,执行操作时,可看到对应执行的命令?

最简单用法

通常我们新建/现有的解决方案/项目中会包含.sln/.csproj文件

1# 构建解决方案,使用默认参数 2MSBuild xxx.sln 3 4# 构建项目,使用默认参数 5MSBuild xxx.csproj

指定环境配置

新建的项目通常包含Debug/Release这2种默认环境配置(还可以自定义),构建时可以通过以下方式指定

1# /property = /p(简写) 2 3# 生成 Debug 环境下的内容 4MSBuild xxx.csproj /p:Configuration=Debug 5 6# 生成 Release 环境下的内容 7MSBuild xxx.csproj /p:Configuration=Release

Debug & Release 对比

指定目标操作

在 Visual Studio 中构建时,通常会有 生成/重新生成/清理 等操作,命令如下:

1# /target = /t(简写) 2 3# 清理 4MSBuild xxx.csproj /target:Clean 5 6# 生成 7MSBuild xxx.csproj /target:Build 8 9# 重新生成 10MSBuild xxx.csproj /target:Rebuild 11# 等同于组合操作 12MSBuild xxx.csproj /target:Clean;Build

指定输出目录

RT.

1# 2MSBuild xxx.csproj /p:OutDic=E:\SomeDir\ 3 4# 如何指定到项目默认输出目录呢?

参考

1time (dotnet msbuild test.csproj -t:Build -p:Configuration=Debug -p:OutDir=bin -p:DebugType=None -p:DebugSymbols=False -restore:False -nologo -detailedSummary -p:nodeReuse=false -p:ResolveProjectReferences=false -consoleLoggerParameters:PerformanceSummary -p:maxCpuCount=1 -p:BuildProjectReferences=false -p:BuildAssemblyReferences=false -p:no-cache=true -p:DependsOnTargets="" && dotnet ./bin/test.dll) 2 3 4Measure-Command { dotnet msbuild test.csproj -t:Build -p:Configuration=Debug -p:OutDir=bin -p:DebugType=None -p:DebugSymbols=False -restore:False -nologo -detailedSummary -p:nodeReuse=false -p:Res 5olveProjectReferences=false -consoleLoggerParameters:PerformanceSummary -p:maxCpuCount=16 -p:BuildProjectReferences=false -p:BuildAssemblyReferences=false -p:no-cache=true -p:DependsOnTargets="" | dotnet ./bin/test.dll}

参考文档

点赞
收藏

评论区

加载中...

相关推荐

MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1

文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s

Oracle 分组与拼接字符串同时使用

SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(

MySQL部分从库上面因为大量的临时表tmp_table造成慢查询

背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_

皕杰报表之UUID

​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为

手写Java HashMap源码

HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程HashMap的使用教程22

swap空间的增减方法

(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap