首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

.NET Core中使用Razor模板引擎

一般情况下使用Razor作为视图引擎要实现如下步骤:   (1)读取模板文件 -> (2)生成Raozr的C#代码 -> (3)使用Roslyn编译代码生成程序集 -> (4)动态加载程序集 -> (5...3.编译模板 一般Razor的C#代码生成后,都是通过CodeDom来生成和编译代码的;.NET开源后,我们又多了一个强大的选择Roslyn , Roslyn也是支持.NET Core的,并且在整个....NET平台中,扮演着非常重要的角色,小到这种视图代码编译,大到整个项目的编译场景都有Roslyn的身影。...微软最新开源的Visual Studio Code中C#插件,OmniSharp就是通过Roslyn来对项目和编辑器提供支持的。   ...其中注意的是LoadTypeForAssemblyStream方法,因为在.NET Core中动态加载程序集的方式跟以前有所不同AppDomain的概念现在已经消失,所以要在.NET Core动态加载程序集要使用

2.3K30

ClassDescription

今天就来整理一下 .NET 平台关于动态代码生成的一些技术方案。...{ public string Name { get; set; } public Type Type { get; set; } } 在正式开始编写动态代码生成的核心代码之前...Emit 在 .NET Core 之前我们要动态生成一个 class 那么几乎 Emit 是首先技术。当然 Emit 在 .NET Core 中依然可以使用。...Natasha 是基于 RoslynC# 动态程序集构建库,该库允许开发者在运行时使用 C# 代码构建域 / 程序集 / 类 / 结构体 / 枚举 / 接口 / 方法等,使得程序在运行的时候可以增加新的模块及功能...现在最推荐的是 Roslyn 方案。因为它的过程比较符合手写代码的感觉,而且他还提供了代码分析功能,能返回编写代码的语法错误等信息,非常有助于 debug 。

52620
您找到你想要的搜索结果了吗?
是的
没有找到

Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码

Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码 发布于 2018-05-25 13:24...更新于 2018-06-02 01:26 Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。....NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码(本文) Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码 我们希望做什么?...所以(利好消息),我们这回可以使用 .NET Core 跨平台版本的 Roslyn 了。所以为了充分有跨平台特性,我们创建控制台应用 (.NET Core)。 ?...请阅读原文: https://walterlv.com/post/compile-and-invoke-code-using-roslyn.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验

1.3K10

使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载

因为 .NET Core 不像 .NET Framework 一样支持动态创建与卸载 AppDomain,所以一直都没有好的方法实现插件热加载,好消息是,.NET Core 从 3.0 开始支持了可回收程序集...本文会通过一个 180 行左右的示例程序,介绍如何使用 .NET Core 3.0 的 AssemblyLoadContext 实现插件热加载,程序同时使用了 Roslyn 实现动态编译,最终效果是改动插件代码后可以自动更新到正在运行的程序当中...; _watcher.EnableRaisingEvents = true; } 这个方法创建了 FileSystemWatcher,监听插件文件夹下的文件是否有改变,如果有改变并且改变的是 C#...接下来它会查找插件文件夹下的所有 C# 源代码,用 CSharpSyntaxTree 解析它们,并用 CSharpCompilation 编译,编译时引用的程序集列表是构造函数中取得的默认 AssemblyLoadContext...这段代码中有两个需要注意的部分,第一个部分是 Roslyn 编译失败时不会抛出异常,编译后需要判断 emitResult.Success 并从 emitResult.Diagnostics 找到错误信息

4.6K30

动态代码框架发布-CZGL.Roslyn

CZGL.Roslyn 开源项目位置:https://github.com/whuanle/CZGL.CodeAnalysis 基于 Roslyn 技术的 C# 动态代码构建器以及编译器,开发者可以使用此库动态构建...C# 代码,并且通过指定条件编译代码。...运行时动态构造代码; 运行时为程序提供新的模块功能,拓展能力; 设计函数平台,以代码片段为单位执行; 语法分析提示,编译错误语法警告,精确到代码行; 完善的代码标准,避免动态代码语法错误; 简洁、简单的...与 Natasha 的关系 Natsha 是一个非常优秀的动态代码框架,由大帅主导,形成了功能完整、性能强悍,并且兼容 .NET FX 4.6~.NET Core ↑ ,通过了大量性能测试以及高性能代码优化...处于初版,代码还处于非常简单的状态,逻辑也很简单,因此,如果你有意学习 C# 中的反射、动态代码技术等,想了解源代码在生成后如何通过反射获得信息、源代码会被如何编译等,CZGL.Roslyn 就是你最佳的选择

1.1K30

.NET周报【12月第1期 2022-12-08】

这篇文章涵盖了这个版本中的以下主题 C#支持 C# 11 的特点 语言注入 全球进口水沟标志 漏洞版本的依赖检测 支持 ARM64 上的 Visual Studio 动态程序分析的数据库检查 支持 C+.../ 宣布将 Azure Pipelines 的.NET Agent 从.NET Core 3.1 升级到.NET 6。...为了支持新的操作系统和架构,并且因为对.NET Core 3.1 的支持将于 12 月 13 日结束,所以我们将于 12 月 13 日推出.NET Core 3.1。 新的代理将分三个阶段推出。...这个版本包括对 C# 11 必要成员的支持,对 Roslyn 模式检测的更新,以及其他错误和改进。 文章、幻灯片等。...我想在 C#(.NET Core 3.1, .NET 6)运行时替换系统时区(使 TimeZoneInfo.Local 返回 UTC) - Qiita https://qiita.com/fukasawah

4.6K20

.NET平台系列7 .NET Core 体系结构详解

NativeRuntime 将 C# 、F#或VB代码直接转换为原生机器码直接运行。...【底层】编译器 Roslyn   .NET Compiler Platform (项目代码为 Roslyn) s是一个开源的跨平台源代码编译器。...、错误回报等等功能,只要是遵循 CLI 标准的编程语言,都可以利用 .NET Compiler Platform 实现出编译器,让程序管理工具能实现如语法提示、语法自动完成、关键字高亮等可视化能力。   ...Roslyn 编译原理 Roslyn编译器用于将 C#、F#或VB.NET 代码编译为程序集(Assembly),它的编译过程是一个管道式的处理过程,一共包含4个步骤,具体过程见下图。 ?...(4)虽然编译时会替换反射代码,但遇动态反射代码无能为力,运行时若遇动态反射调用则会因找不到对应的元数据及实现而抛出异常。

98720

从零开始学习 dotnet 编译过程和 Roslyn 源码分析

以下是这部分的性能数据: C# 程序集数量对软件启动性能的影响 - 林德熙 不过,程序集中的类的数量对启动性能没有影响: C# 直接创建多个类和使用反射创建类的性能 - 林德熙 SourceFusion...: .NET/C# 中你可以在代码中写多个 Main 函数,然后按需要随时切换 - 吕毅 在 Visual Studio 的解决方案资源管理器中隐藏一些文件 - 吕毅 使用链接共享 Visual Studio...- 吕毅 Roslyn 如何基于 Microsoft.NET.Sdk 制作源代码包 - 林德熙 Roslyn 基础 Roslyn 由于其丰富且易用的 API,所以入门是比较容易的。...入门:使用 Roslyn 静态分析现有项目中的代码 - 吕毅 Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码 - 吕毅 额外的,你可以阅读更多 Roslyn...,以避免陈旧错误知识的误导,同时有更好的阅读体验。

25340

.Net 编译器平台--- Roslyn Scripting APIs

引言 上一篇中.Net 编译器平台 --- Roslyn,介绍了Roslyn的各项功能,包括公开API,使用语法,使用语义,使用工作区等功能。...Scripting APIs Samples 脚本 API 可以让 .NET 应用程序实例化一个 C# 引擎,并针对由宿主提供的对象执行代码片段。以下是使用脚本 API 并进行一些常见示例的入门示例。...支持的平台 脚本 API 需要桌面版 .NET Framework 4.6+ 或 .NET Core 1.1(自 Roslyn v2.0.0-rc3、Visual Studio 2017 RC3 起支持...表达式(Evaluate a C# expression) 评估一个C#表达式(强类型)(Evaluate a C# expression(strongly-typed)) 带错误处理的评估C#表达式(...(strongly-typed)) int result = await CSharpScript.EvaluateAsync("1 + 2"); 带错误处理的评估C#表达式(Evaluated

20010

.Net 编译器平台 --- Roslyn

引言 最近做一个功能想要动态执行C#脚本,就是预先写好代码片段,在程序运行时去执行代码段,比如像这样(以下代码为伪代码): string scriptText = "int a = 1;int b =...Roslyn 支持 C# 和 VB.NET 两种编程语言。它提供了一组通用 API,这样两种语言之间共享代码就变得容易。...Roslyn 与 Visual Studio、Visual Studio Code 和其他支持 C# 和 VB.NET 的 IDE 集成很好。...Roslyn概述 因为现在需要它的动态编译,动态执行代码的功能,所以先仔细了解一下,看一下它的官方概述(https://github.com/dotnet/roslyn/blob/main/docs/wiki...这就是 Roslyn核心任务:打开这些黑盒子,让工具和终端用户能够分享编译器对代码的丰富信息。

25030

【愚公系列】2023年01月 .NET CORE工具案例-CS-Script脚本执行引擎

脚本的解决方案,有Roslyn和Mono。...CS-Script主要是基于Roslyn封装实现的,并且提供了一些额外功能: 执行完整的C#文件 通过外部进程执行C#文件 在运行过程中链接多个C#文件,并集成运行 提供简便的方法进行链接 脚本调试功能...CS-Script 是最成熟的 C# 脚本解决方案之一。它于 2004 年公开可用,距 .NET 首次发布仅两年。它是第一个适用于.NET 的综合脚本平台。...这样就可以将脚本引擎用作 PowerShell 的纯C#替代方案。以及使用托管脚本引擎在运行时执行的 C# 脚本扩展 .NET 应用程序。.../CodeDom三种脚本引擎,由于.NET CORE的特殊性,CS-Script.Core做了删减,只能支持Roslyn一种引擎了,支持的C#语言版本由Roslyn版本决定。

79550

.Net Core 你必须知道的source-generators

源生成器是 C# 9 中引入的一项功能,允许在编译过程中动态生成代码。 它们直接与 C# 编译器集成(Roslyn)并在编译时运行,分析源代码并根据分析结果生成附加代码。...通过无缝集成到编译过程中,源生成器可以提高生产力、减少错误并实现更高效的开发工作流程。 如何使用 创建 .NET 控制台应用程序。此示例使用 .NET 6。将 Program 类替换为以下代码。...创建一个以 netstandard2.0 目标框架名字对象为目标的 .NET 类库。...Microsoft.CodeAnalysis.Analyzers" Version="3.3.4" PrivateAssets="all" /> 然后,创建一个名为 HelloSourceGenerator.cs 的新 C#...https://learn.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/source-generators-overview

8510

如何实现运行时动态定义Controller类型?

昨天有个朋友在微信上问我一个问题:他希望通过动态脚本的形式实现对ASP.NET Core MVC应用的扩展,比如在程序运行过程中上传一段C#脚本将其中定义的Controller类型注册到应用中,问我是否有好解决方案...如下所示的是一个MVC应用的主页,我们可以在文本框中通过编写C#代码定义一个有效的Controller类型,然后点击“Register”按钮,定义的Controller类型将自动注册到MVC应用中 ?...二、动态编译源代码 要实现如上所示的“针对Controller类型的动态注册”,首先需要解决的是针对提供源代码的动态编译问题,我们知道这个可以利用Roslyn来解决。...var syntaxTrees = new SyntaxTree[] { CSharpSyntaxTree.ParseText(text) }; var compilation = CSharpCompilation.Create..._token = new CancellationChangeToken(_source.Token); old.Cancel(); } } 五、应用构建 到目前为止,核心的两个类型

1.4K40

Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码

更新于 2018-06-02 01:26 Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性。...Framework 是必须的;如果只是分析单个文件,那么也可以选择 .NET Core,参见 Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码。...语法重写——Syntax Rewriter RoslynC# 代码进行分析的一个非常关键的 API 是 CSharpSyntaxRewriter——这是一个专门用来给你继承的类。...在访问者模式中,由于 C# 的语法在一个 C# 版本发布之后就会确定,其中各种各样类型的语法对应访问者模式中的各种不同类型的数据,Roslyn 为我们构建的语法树对应访问者模式中需要访问的庞大的数据结构...,以避免陈旧错误知识的误导,同时有更好的阅读体验。

1.7K10

简析 .NET Core 构成体系

最后还要提到一个开源的跨平台源代码编译器Roslyn,它有别于刚才两个编译器,JIT和AOT编译器主要用于将IL编译成本机机器码,而Roslyn是将C# 或 VB.NET 代码编译成程序中间语言(intermediate...Roslyn 编译器 Roslyn编译器用于将C#或VB.NET代码编译为程序集(assembly),它的编译过程是一个管道式的处理过程一共包含4个步骤,具体过程见下图。 ? A....CoreCLR & CoreRT CoreCLR 和 CoreRT 都是.NET Core的运行时(Runtime), 它们提供了与.NET Framework CLR 类似的核心功能(内存管理、程序集加载...虽然编译时会替换反射代码,但遇动态反射代码无能为力,运行时若遇动态反射调用则会因找不到对应的元数据及实现而抛出异常。.../ 【7】https://zh.wikipedia.org/wiki/.NET_Core 以上内容有任何错误或不准确的地方请大家指正,不喜勿喷!

75120

苏州 开源自主的 dotnet 生态

当然了答案肯定是可以的 从 Roslyn 编译器开始,整个 Roslyn 编译器是采用 C# 编写的,依托于 dotnet 运行时运行。...【停顿】这个 Roslyn 编译器很有意思,因为这是一个一半用 C# 一半用 VB 写的编译器,这是一个多么有趣的套娃游戏:用 C# 写的 Roslyn 编译器来编译 C# 代码。...有趣的是,咱的 Roslyn 编译器的运行也是需要用到 dotnet runtime 的,也需要用到很多基础库,因此这就有一个有趣的套娃了,咱使用 C# 写的 Roslyn 编译器来编译 C# 代码,用运行在...而 .NET 基金会2014年微软组织成立的一个独立的组织。2014年以来已经有众多知名公司加入.NET基金会, 仅在平台项目中,.NET平台上有大量贡献者其实不在Microsoft工作。...%8F%E5%B7%9E-%E5%BC%80%E6%BA%90%E8%87%AA%E4%B8%BB%E7%9A%84-dotnet-%E7%94%9F%E6%80%81.html ,以避免陈旧错误知识的误导

96120

高性能动态编译库Natasha发布1.0版本!

Natasha使用Roslyn做为编译引擎,不仅仅在动态构建上进行了人性化升级,还在功能上进行了简化。...想尽一切办法拼接字符串,目前符合CSharp7.3或以下C#版本的都行。...四、性能 这几年随着.NET架构引擎的不断升级,dynamic、emit执行性能已经得到了大幅度提升,roslyn也不例外,之前官方给过性能测试截图,上面显示是比emit快一点,个人的基准测试要等下一个...八、调试 由于核心编译引擎为Roslyn,因此语法检查、词法检查、语义检查等都支持,这样可以很好的为开发者提供错误提示, Natasha为此增加日志模块(NScriptLog), 在编译流程中...Natasha如果说是一个库不如说是一个时机,动态封装已经不是学习成本高、开发效率低的工作了,希望各位能积极参与尝试开源项目,共同打造.NET Core新生态。

46440

程序员开发者神器:10个.Net开源项目

2、提高程序灵活性和效率的利器:Natasha动态编译库 该项目是基于RoslynC#动态程序集构建库,使用该库允许开发者动态运行C#代码,方便动态的新增和升级模块和代码,该项目还集成了域管理、插件管理等功能...,可以很好的实现隔离,并且提供了完整的错误提示,方便开发者开发与调试。...5、一个改善Entity Framework异常处理和错误信息的开源项目 EntityFramework.Exceptions是一个针对Entity Framework解决在异常处理方面的一些问题,为开发人员提供更好的异常处理和错误信息...4、其他:除了以上核心特点,还提供一些非常有用的扩展方法,比如对可选值(Option)和列表(List)等常见集合类型的操作。...推荐阅读: 一份阅读量突破10万+的C#/.NET/.NET Core面试宝典(基础版) 【微信自动化】使用c#实现微信自动化 细聊C# AsyncLocal如何在异步间进行数据流转 从未来看C

39140
领券