roslyn

编译器移植到.NET Core失败记录和对.NET未来感想

安稳与你 提交于 2020-10-04 22:52:08
.NET Core 是微软力推的新平台,影响力好像还越来越大。为了对这一行业趋势有所准备,最近把自己搞的编程语言的编译器从 .NET 移植 .NET Core ,以实现跨平台在 Linux 上运行,然而失败了。 原因是 .NET Core 类库中 AppDomain 、 AssemblyBuilder 、 ModuleBuilder 、 ILGenerator 等等缺失了一些很核心的方法或类型,导致无法编译通过。 核心缺少这些无法编译成功,也不能生成最终的二进制文件。那些以前可以在 .NET CLR 上运行的开源语言 .NET Core 对它们来说已经没有了吸引力,现在没有一个跟进到 .NET Core 上,所以也没有办法从开源项目中获得帮助。比如说 Clojure CLR ,我下载了它最新的编译器源码,它还是用 System.Reflection.Emit 命名空间生成 IL 指令。 微软要在 .NET Core 上废弃了 System.Reflection.Emit 那一套东西。我拼命研究的那套生成 IL 的知识要作废了。这让我想到了 Sliverlight 、 XNA 、 Windows Phone 的下场。我辛辛苦苦钻研到的这部分知识又被归零了,让我想到了刷卡时为零 ( 萨卡什维利外号 ) 。 我又想到现在微软现在是用 Roslyn 编译 C# 的,而且 Roslyn

C#9.0 终于来了,您还学的动吗? 带上VS一起解读吧!(应该是全网第一篇)

谁说我不能喝 提交于 2020-08-18 14:41:01
一:背景 1. 讲故事 好消息, .NET 5.0 终于在2020年6月10日发布了第五个预览版,眼尖的同学一定看到了在这个版本中终于支持了 C# 9.0 ,此处有掌声,太好了!!! .Net5官方链接 可以看到目前的C#9还是预览版,实现了一部分新语法供开发者提前尝鲜,从github的roslyn仓库上可以看到目前准备实现 17 个新特性,现阶段已经实现了 8 个,其中的 In Progress 表示正在开发中。 新特性预览 2. 安装必备 下载最新的 net5 sdk 吧: dotnet-sdk-5.0.100-preview.5.20279.10-win-x64.exe 下载最新的 visual studio 2019 preview 2 找好你自己的vs版本类型哦。。。 二:新特性研究 1. Target-typed new 这个取名一定要留给学易经的大师傅,没见过世面的我不敢造次,取得不佳影响时运,所谓 运去金成铁, 时来铁似金 ,不过大概意思就是说直接new你定义的局部变量的类型,用 issues 中总结的话就是: Summary: Allow Point p = new (x, y); Shipped in preview in 16.7p1. 接下来就是全部代码,看看 使用前 和 使用后 的具体差别。 class Program { static void Main

msbuild 修改 VisualStudio 文件复制到输出目录的路径

故事扮演 提交于 2020-08-16 16:56:14
在默认的 VisualStudio 可以右击任意的文件,让这个文件在编译时复制到输出目录,但是这个选项将会在复制到输出目录时带上这个文件所在 VisualStudio 的文件夹结构。本文告诉大家几个方法让 VisualStudio 的文件可以在编译时输出到自定义的任意路径 文件夹到文件夹 将整个文件夹内容输出到自定义文件夹可以使用写一个 Target 的方法 如我需要将 VisualStudio 的 dll 文件夹的内容全部输出到输出目录,而不是输出到 输出目录下的 Dll 文件夹,可以使用下面代码 <Target Name="CopyReferenceDll" AfterTargets="Build"> <ItemGroup> <ReferenceDll Include="Dll\*.dll"> </ReferenceDll> </ItemGroup> <Copy SourceFiles="@(ReferenceDll)" DestinationFolder="$(OutputPath)" SkipUnchangedFiles="True"></Copy> </Target> 将上面代码复制到 csproj 文件里面,放在 </Project> 之前就可以做到将 VisualStudio 里面的 Dll 文件夹的 dll 文件复制到输出文件夹 至于需要输出其他文件到其他文件夹的

从零开始实现ASP.NET Core MVC的插件式开发(八)

跟風遠走 提交于 2020-08-16 07:30:28
标题:从零开始实现ASP.NET Core MVC的插件式开发(八) - Razor视图相关问题及解决方案 作者:Lamond Lu 地址: https://www.cnblogs.com/lwqlun/p/13197683.html 源代码: https://github.com/lamondlu/Mystique 前景回顾 从零开始实现ASP.NET Core MVC的插件式开发(一) - 使用Application Part动态加载控制器和视图 从零开始实现ASP.NET Core MVC的插件式开发(二) - 如何创建项目模板 从零开始实现ASP.NET Core MVC的插件式开发(三) - 如何在运行时启用组件 从零开始实现ASP.NET Core MVC的插件式开发(四) - 插件安装 从零开始实现ASP.NET Core MVC的插件式开发(五) - 使用AssemblyLoadContext实现插件的升级和删除 从零开始实现ASP.NET Core MVC的插件式开发(六) - 如何加载插件引用 从零开始实现ASP.NET Core MVC的插件式开发(七) - 近期问题汇总及部分解决方案 简介 在上一篇中,我给大家分享了程序调试问题的解决方案以及如何实现插件中的消息传递,完稿之后,又收到了不少问题反馈,其中最严重的问题应该就是运行时编译Razor视图失败的问题。

dotnet 通过 dotnetCampus.YamlToCsharp 将 YAML 多语言文件构建为代码

こ雲淡風輕ζ 提交于 2020-08-14 02:51:10
我在团队内的几乎所有 dotnet 项目,包括 UWP 和 WPF 桌面端以及 Xamarin 移动端和 ASP.NET Core 后端等需要用到多语言的项目,我的多语言都是通过 YAML 写的,这样相对来说在项目比较小的时候维护方便。但是 YAML 写的文件要读取需要用到 YAML 解析等,这部分的解析速度不够快,于是我就写了一个工具,用于在软件构建的时候自动将 YAML 多语言文件构建为代码。这样不仅能提升软件的执行速度,还能减少软件发布时需要带出去 YAML 解析库 用 YAML 做多语言有什么好处?其实在项目用的语言项不多的时候可读性还是很好的,维护起来也很清真 但是用 YAML 作为输出的缺点是需要在软件运行的时候解析这个 YAML 多语言文件,而解析 YAML 多语言文件需要 YAML 解析库,但是实际上我可以在软件构建的时候将 YAML 文件转换为 C# 代码,这样我就可以在软件运行的时候不需要解析这个 YAML 文件,提升我软件的运行速度 在客户端的应用,很多时候在软件运行第一个界面就需要用到多语言,而启动的时候文件读写最多的。如果此时还需要读取 YAML 文件,那么对软件启动速度还是很伤的。而刚好 dotnet 的一项技术就是 Roslyn 预编译技术,虽然本文用到的技术和 Roslyn 没有什么关系。但是可以在软件构建的时候将 YAML 转 C#

C#9.0 终于来了,带你一起解读Pattern matching 和 nint 两大新特性玩法

余生长醉 提交于 2020-08-11 18:34:13
一:背景 1. 讲故事 上一篇跟大家聊到了 Target-typed new 和 Lambda discard parameters ,看博客园和公号里的阅读量都达到了新高,甚是欣慰,不管大家对新特性是多头还是空头,起码还是对它抱有一种极为关注的态度,所以我的这个系列还得跟,那就继续开撸吧,今天继续带来两个新特性,更多新特性列表,请大家关注: 新特性预览 二:新特性研究 1. Native ints 从字面上看貌似是什么原生类型ints,有点莫名其妙,还是看一看 Issues 上举得例子吧: Summary: nint i = 1; and nuint i2 = 2; Shipped in preview in 16.7p1. 有点意思,还是第一次看到有nint这么个东西,应该就是C#9新增的关键词,好奇心爆棚,快来实操一下。 static void Main(string[] args) { nint i = 10; Console.WriteLine($"i={i}"); } 从图中看,可以原样输出,然后用ILSpy查查底层IL代码,发现连IL代码都不用看😁😁😁。如下图: 从图中看原来nint就是 IntPtr 结构体哈,如果你玩过 C# 到 C++ 之间的互操作,我相信你会对Ptr再熟悉不过了,从这个 nint 上看,<font color="red">你不觉得C

找不到路径的一部分... bin \\ roslyn \\ csc.exe

为君一笑 提交于 2020-08-11 15:01:17
问题: I am trying to run Asp.net MVC project retrieved from TFS source control. 我正在尝试运行从TFS源代码控制检索的Asp.net MVC项目。 I have added all assembly references and I am able to build and compile successfully without any error or warning. 我已经添加了所有程序集引用,并且能够成功构建和编译而没有任何错误或警告。 But I get the following error in the browser: 但是我在浏览器中收到以下错误: Could not find a part of the path 'C:\\B8akWorkspace\\B8akProject\\B8akSolution\\B8AK.Portal\\bin\\roslyn\\csc.exe'. 找不到路径“ C:\\ B8akWorkspace \\ B8akProject \\ B8akSolution \\ B8AK.Portal \\ bin \\ roslyn \\ csc.exe”的一部分。 Here is a full screenshot of the error page.