架构师_程序员_码农网

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 25491|回复: 0

[资料] Roslyn MSBuild 编译器的区别

[复制链接]
发表于 2021-3-21 11:55:39 | 显示全部楼层 |阅读模式
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 重新编译,如下:

使用十年的电脑在家用记事本调试 .NET 程序
https://www.itsvse.com/thread-9419-1-1.html

Roslyn 是微软公司开源的 .NET 编译器。编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。
我们尝试新建一个 .NET framework 4.6 的项目,使用 vs 2019 将生成“MSBuild项目生成输出详细程度”设置成为正常,如下图:

QQ截图20210321114157.jpg

右击项目尝试重新生成,如下图:


QQ截图20210321114410.jpg
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 动态生成程序集
码农网,只发表在实践过程中,遇到的技术难题,不误导他人。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

免责声明:
码农网所发布的一切软件、编程资料或者文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:help@itsvse.com

QQ|手机版|小黑屋|架构师 ( 鲁ICP备14021824号-2 )|网站地图

GMT+8, 2024-4-26 13:55

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表