3 .netcore Roslyn 动态编译 语义分析

C#动态编译 C#动态编译 现在写的项目涉及了在.net standard下的动态编译,这篇文章就是来记录一下实现动态编译的过程。 CodeDom 一开始我使用的是System.CodeDom,在运行时会报错提示平台不支持的错误,在查询后发现.Net Standard不支持System.CodeDom,需要在上面一层建立和Roslyn依赖关系。Roslyn是一种.net 编译器。这一层也有人提供,叫Microsoft.CodeDom.Providers.DotNetCompilerPlatform。但我这次的实现并没有用 阅读详情

原文地址:https://docs.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/get-started/semantic-analysis

什么是语义

语法规定了代码怎么写,而语义规定了代码表达了什么意思

了解编译和符号

Compilation 实例是编译器所看见的单个项目
符号是一个名词(如命名空间System,类Console等),其包含了描述该名词的信息(如:类型、命名空间、成员和变量的实体)
Compilation 允许你查找“符号”
通过Microsoft.CodeAnalysis.CSharp.CSharpCompilation创建Compilation实例时

查询符号

如下查找符号示例:

            const string programText =
    @"using System;
using System.Collections.Generic;
using System.Text;

namespace HelloWorld
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(""Hello, World!"");
        }
    }
}";
            SyntaxTree tree = CSharpSyntaxTree.ParseText(programText);
            // 获取根语法节点
            CompilationUnitSyntax root = tree.GetCompilationUnitRoot();

            // 获取编译模型
            var compilation = CSharpCompilation.Create("HelloWorld")
            .AddReferences(MetadataReference.CreateFromFile(
                typeof(string).Assembly.Location))
            .AddSyntaxTrees(tree);

            // 获取语义模型
            SemanticModel model = compilation.GetSemanticModel(tree);

            // 获取 "using System;" 语法
            UsingDirectiveSyntax usingSystem = root.Usings[0];
            // 获取 name 语法,即 System
            NameSyntax systemName = usingSystem.Name;

            // 从语义模型获取对应的符号信息
            SymbolInfo nameInfo = model.GetSymbolInfo(systemName);

            // 获取符号
            // 不是所有的语法都具有符号,像 "using System;" 语法就不具有符号,应为它不是一个符号
            var systemSymbol = (INamespaceSymbol)nameInfo.Symbol;
            foreach (INamespaceSymbol ns in systemSymbol.GetNamespaceMembers())
            {
                Console.WriteLine(ns);
            }
NetCore基于Roslyn的动态编译实现 AvalonEdit文本器+NRefactory+Roslyn动态编译 1. AvalonEdit实现编写,高亮,复制,黏贴,撤回等基础功能 2. NRefactory实现代码提示相关 3. Roslyn实现动态编译(CSharpCodeProvider只支持Framework,Roslyn可以同时支持Framwork和netcore) 阅读详情

相关推荐

.Net Core - 源代码动态编译V2

.Net Core - 源代码动态编译V2

5 .netcore Roslyn 动态编译 编译

使用CSharpCompilation实现动态编译 // 添加要引用的程序集 List<MetadataReference> refs = new List<MetadataReference>() { MetadataReference.CreateFromFile (typeof (object).Assembly.Location), MetadataReference.CreateFromFile (typeof (List<int>).Assem

dabusidede的博客 1718

.Net Core - 源代码动态编译

.Net Core - 源代码动态编译

.netcore -源代码动态编译

一、新建项目JIT Nuget: <ItemGroup> <PackageReference Include="Microsoft.CodeAnalysis.Common" Version="3.10.0" /> <PackageReference Include="Microsoft.CodeAnalysis.CSharp" Version="3.10.0" /> </ItemGroup> 核心代码:WeatherFore

码农的专栏 1582

手把手教你使用YOLOv11模型,训练自己数据集,百分百成功(无废话)

YOLOV11百分百成功训练自己的数据集并进行图像、视频流脚本预测

chenhenGzzz的博客 1953

unity 休闲游戏 动效规范说明

在特效制作中,有时为了完成更丰富、更绚丽的效果,可能会添加一些高级Shader(着色器),例如扭曲、溶解,这些Shader(着色器)往往需要用到显卡的部分功能,会造成较大的性能损耗。如果对纹理细节要求较高,那么建议使用贴图比例为1∶1的正方形(不强制),使用不等边贴图制作特效时会对纹理清晰度造成一定的损失(引擎算法决定)。首先选择模型体,然后在Inspector(检测视图)中查看该物体的属性,找到MeshRenderer(网格渲染)组件中的阴影设置项,如图。制作特效时,尽量不要使用灯光系统。

丛小胖 1611

Roslyn语法树:代码结构的精确表示与操作

Roslyn语法树是C#和VB.NET源代码的解析表示形式,作为抽象语法树(AST)的具体实现,它承载了源代码的完整结构信息、位置信息以及语义上下文。本文详细解析了SyntaxTree的核心架构、创建与解析方式、节点层次结构、位置信息机制以及不可变特性。同时深入探讨了语法树的三个基本构建元素:SyntaxNode(语法节点)、SyntaxToken(语法标记)和SyntaxTrivia(语法琐碎)...

gitblog_01153的博客 560

基于IDEA与Mill构建Windows下的Chisel开发环境——香山处理器源码解析实战

本文详细指导如何在Windows系统下使用IDEA集成开发环境和Mill构建工具搭建Chisel开发环境,并以香山处理器源码为实战案例进行解析。内容涵盖环境准备、源码获取、工程构建、IDEA配置优化及代码阅读技巧,帮助开发者高效学习硬件设计语言。

a1b2c3d的博客 717

使用 Roslyn引擎动态编译代码

Roslyn引擎自2014年开源至今这么久,一直没怎么了解过,虽然VS2015早就集成了它。 以前老一套的动态编译方法在 .NET Core中似乎不再支持了,很多方法都是未实现的。下面就介绍如何在.NET Core环境中使用Roslyn进行动态编译。话不多说,Talk is cheap, show me the code. 首先是安装nuget包 Install-Package Micr...

weixin_34082789的博客 917

基于MS5351的三通道可编程时钟发生器设计

时钟发生器是数字系统时序验证与信号完整性测试的核心基础设备,其原理基于锁相环(PLL)对参考晶振进行倍频与分频控制,通过寄存器配置实现多路独立频率输出。技术价值体现在高精度、低抖动、快速切换与工程可部署性之间取得平衡,尤其适用于FPGA/ASIC参考时钟调试、ADC/DAC采样时钟验证及嵌入式硬件时序裕量评估等场景。本方案采用MS5351三通道时钟芯片与ESP32主控协同架构,在保证LVCMOS输出质量与I²C可编程性的前提下,优化电源噪声抑制、晶体负载匹配和跨板信号完整性,兼顾成本、周期与实测稳定性,为实

weixin_31715353的博客 211

Chromium实用技巧篇-如何下载指定版本的Chromium(一)

通过本指南,您已成功掌握如何在Windows系统上下载并安装最新版本的Chromium浏览器。我们详细介绍了从进入Chromium官网,到查找最新版本号,再到下载和安装的每一个步骤。通过这些步骤,您不仅能够体验到最新的浏览器功能,还可以参与开源项目的开发,享受高速、稳定、安全的浏览体验。

守城小轩的技术窝棚 1万+

基于 Roslyn 实现动态编译

基于 Roslyn 实现动态编译Intro之前做的一个数据库小工具可以支持根据 Model 代码文件生成创建表的 sql 语句,原来是基于 CodeDom 实现的,最近改...

dotNET跨平台 1714

【YOLOs-CPP-图像分类部署】04-项目优化(加速部署)

本文详细介绍了将YOLO图像分类C++部署项目从CMake迁移到Visual Studio控制台应用的全过程。针对低配CPU性能瓶颈问题,作者通过替换多线程HPP代码为官方实现,并采用448x448固定输入尺寸优化推理速度。项目配置包含OpenCV和ONNX Runtime环境设置,实现了图像批量处理、分类结果显示及结果日志输出功能。关键步骤包括依赖库配置、DLL部署和代码调试,最终在Windows平台成功实现高效CPU推理。该方案显著提升了低配硬件的兼容性,为图像分类任务提供了稳定的部署解决方案。

深耕CV 354

.net Core 3.1下的Roslyn 动态编译

CSharpCodeProvider说是支持.net core 经过实验是不支持的,所以动态编译选择roslyn。 首先,我们需要建立一个项目 .net core ,nuget 安装Microsoft.CodeAnalysis.CSharp和Microsoft.CodeAnalysis.CSharp.Workspaces. 哪我就直接上代码 就不多说 说一些遇到问题点 public static bool BuildAssembly(string TenancyFID, str...

Crazy2910的专栏 2509

图像拼接(Image Stitching)

图像拼接(Image Stitching):是一项计算机视觉技术,它将多张重叠的图像合并为一张更大、无缝的全景图或广角视图。该技术广泛应用于全景摄影、地图制作、医学影像处理、计算机视觉及增强现实(AR)等领域。

📷 图像处理践行者 | 传统算法 · 深度学习 · 多模态 | 分享实战经验与技术洞见,探索从像素到智能的无限可能。 2505

如何在 DevOps 管道中实现 AI?

AI与DevOps的融合(AIOps)正在重塑软件开发生命周期。本文系统阐述了AI在DevOps中的五大应用场景:智能监控、自动化测试、安全防护、CI/CD优化和事件管理,并提出了六步实施框架:痛点识别、工具选型、流程集成、智能监控、MLOps和治理合规。通过Netflix、Google等企业的实践案例,验证了AI在提升部署效率(降低40%故障率)、缩短问题解决时间(MTTR减少60%)方面的显著价值,同时指出数据质量、模型偏差等实施挑战。研究表明,战略性地

介绍AWS Azure GCP devops Terraform 等技术 497

2 .netcore Roslyn 动态编译 语法分析

原文地址: https://docs.microsoft.com/zh-cn/dotnet/csharp/roslyn-sdk/get-started/syntax-analysis 安装 .NET Compiler Platform SDK 安装 .NET Compiler Platform SDK 我们可以在Visual Studio查看语法树 执行如下步骤安装 .NET Compiler Platform SDK 运行“Visual Studio 安装程序” 选择“修改” 检查“Visual Stud

dabusidede的博客 638

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

1 .netcore Roslyn 动态编译 概念

语法树 语法树是用于编译、代码分析、绑定、重构、IDE 功能和代码生成的主要结构。 语法树具有三个关键特性。 1.是语法树完全保真地保留所有源代码信息,即通过语法树可以看到原来的代码 2.编辑语法树会创建新的树,而不会更改现有树,通过这些操作,可高效编辑文本。 3.获取的树是代码当前状态的快照,不会更改。 这可让多个用户同时在不同线程中与同一语法树进行交互,而不会锁定或重复 语法树实际上是一个树形数据结构,其中非终端结构化元素是其他元素的父元素。 语法节点 语法树由语法节点组成。如声明、语句、子句和表达式等

dabusidede的博客 772

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

4 .netcore Roslyn 动态编译 语法替换

简单的语法替换 该示例将using System.Collections.Generic替换为using System static void Main(string[] args) { const string programText = @" using System.Collections.Generic; using System.Text; namespace HelloWorld { class Program {

dabusidede的博客 452

C#实现在程序中动态编译一段C#代码并执行

C# 可以通过或 CSharpCodeProvider实现动态编译并执行 C# 代码。以下是两种方法的详细介绍和示例代码。

yuanpan的专栏 1737

netcore 动态编译代码生成dll 带工程 多文件

Microsoft.CodeAnalysis.CSharp netcore 动态生成

pehao的博客 622

.net core 3.0视图动态编译

之前在使用Visual Studio 2019的时候,就发现asp.net 3.0中没有cshtml动态编译的功能了:也就是说,如果改了cshtml,刷新页面不会立即生效,而是要重新编译一次才行。 这个特性的缺失对运行的时候没有什么影响,但对于开发来说还是很不方便的。官方解释说现在3.0的ASP.NET Core shared framework中不再依赖Roslyn,也就失去了视图动...

weixin_30436101的博客 440

.net core ——利用 roslyn 编译C#代码

目录 Rosyln介绍 实时编译c#文本为dll 1、增加PreserveCompilationContext配置 2、引用包 3、利用DependencyContext获取编译引用dll 完整例子 引用test库 总结 注脚 Rosyln介绍 Rosyln1是 .NET Core和 .NET 4.6+ 中 的C# 、VB的编译器,宇宙最强IDE Visual Studio 也是使用其来编译代码的, 基于编译器也是服务的理念,微软开发者把其独立出来,并开源维护,开源地址参见...

寒冰屋的专栏 2642
上一篇: 2 .netcore Roslyn 动态编译 语法分析
下一篇: 4 .netcore Roslyn 动态编译 语法替换
dabusidede
博客等级 码龄9年 84粉丝 208原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值