|
MSBuild:Microsoft 生成引擎是一个用于生成应用程序的平台。 此引擎(也称为 MSBuild)为项目文件提供了一个 XML 架构,用于控制生成平台处理和生成软件的方式。 Visual Studio 会使用 MSBuild,但 MSBuild 不依赖于 Visual Studio。 通过在项目或解决方案文件中调用 msbuild.exe,可以在未安装 Visual Studio 的环境中安排和生成产品。
介绍:https://docs.microsoft.com/zh-cn/visualstudio/msbuild/msbuild?view=vs-2019
巴拉巴拉说了这么多,从名称就可以看出,他就是微软的编译器,就是将项目编程成可执行的程序等。
之前就用过,使用 txt 记事本修改代码,使用 msbuild 重新编译,如下:
Roslyn 是微软公司开源的 .NET 编译器。编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。
我们尝试新建一个 .NET framework 4.6 的项目,使用 vs 2019 将生成“MSBuild项目生成输出详细程度”设置成为正常,如下图:
右击项目尝试重新生成,如下图:
1>------ 已启动全部重新生成: 项目: ConsoleApp1, 配置: Debug Any CPU ------
1>生成启动时间为 2021/3/21 11:38:08。
1>GenerateBindingRedirects:
1> ResolveAssemblyReferences 中没有建议的绑定重定向。
1>GenerateTargetFrameworkMonikerAttribute:
1>正在跳过目标“GenerateTargetFrameworkMonikerAttribute”,因为所有输出文件相对于输入文件而言都是最新的。
1>CoreCompile:
1> C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn\csc.exe /noconfig /nowarn:1701,1702,2008 /fullpaths /nostdlib+ /platform:anycpu32bitpreferred /errorreport:prompt /warn:4 /define:DEBUG;TRACE /errorendlocation /preferreduilang:zh-CN /highentropyva+ /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Microsoft.CSharp.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\mscorlib.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Core.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Data.DataSetExtensions.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Data.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Net.Http.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Xml.dll" /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Xml.Linq.dll" /debug+ /debug:full /filealign:512 /optimize- /out:obj\Debug\ConsoleApp1.exe /subsystemversion:6.00 /target:exe /utf8output /deterministic+ /langversion:7.3 Program.cs Properties\AssemblyInfo.cs "obj\Debug\.NETFramework,Version=v4.6.AssemblyAttributes.cs"
1> 对来自后列目录的编译器使用共享编译: C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Roslyn
1>_CopyAppConfigFile:
1> 正在将文件从“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\App.config”复制到“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\ConsoleApp1.exe.config”。
1>CopyFilesToOutputDirectory:
1> 正在将文件从“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\obj\Debug\ConsoleApp1.exe”复制到“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\ConsoleApp1.exe”。
1> ConsoleApp1 -> C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\ConsoleApp1.exe
1> 正在将文件从“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\obj\Debug\ConsoleApp1.pdb”复制到“C:\Users\itsvse_nuc\source\repos\ConsoleApp1\ConsoleApp1\bin\Debug\ConsoleApp1.pdb”。
1>
1>已成功生成。
1> 0 个警告
1> 0 个错误
1>
1>已用时间 00:00:00.66
========== 全部重新生成: 成功 1 个,失败 0 个,跳过 0 个 ==========
以下载自网上其他文章,仅供参考:
.NET Framework 4.0 自带的 MSBuild 不能识别 C# 6.0 语法特性。
"MSBuild" => msbuild.exe, "Roslyn" => csc.exe
MSbuild是Visual Studio的生成系统。它调用C#编译器来编译C#项目。Roslyn是C#编译器(和VB编译器)。因此,msbuild使用Roslyn。
但是,Roslyn不仅包含编译器,还包含更多内容。它还包括一个VS插件,可为您提供IDE功能(完成列表,颜色,代码修复等)。
此外,Roslyn还是用于分析源代码的API,您可以在自己的应用程序中使用它。对于最后一种情况,有一个称为MSBuildWorkspace的API,可用于打开项目或解决方案进行分析。该工作区使用MSBuild找出项目和解决方案的所有部分。因此,罗斯林的这一部分使用MSBuild。
总结:
我自己的理解是 MSBuild 是微软编译器的集合,他可能不负责编译生成,但是他会帮助我们调用 Roslyn 编译 c# 代码。他也可以编译其他语言的代码,然后调用其他相应的编译器。
对于编译 c# 项目,MSBuild 为决策者,Roslyn 为执行者。
|
上一篇:ASP.NET Core(六)DI 手动获取注入对象的方法下一篇:.NET/C# Emit 动态生成程序集
|