Microsoft.CodeAnalysis 入门
1 安装 Microsoft.CodeAnalysis
我这里创建的是WPF的项目,首先再VS2015中用NuGet控制台进行安装
Install-Package Microsoft.CodeAnalysis
Install-Package Microsoft.CodeAnalysis.CSharp.Scripting
2 using 添加
- using Microsoft.CodeAnalysis.Scripting;
- using Microsoft.CodeAnalysis.CSharp.Scripting;
- using Microsoft.CodeAnalysis.CSharp;
- using Microsoft.CodeAnalysis.CSharp.Syntax;
3 Hello World
- #region 01 Hello world
- //Hello Rolysn
- Console.WriteLine(CSharpScript.RunAsync(
- @"string ret =""Hello Rolysn"";")
- .Result.GetVariable("ret").Value);
- #endregion
4 引用和命名空间
- #region 02 References and Namespaces
- ScriptOptions scriptOptions = ScriptOptions.Default;
- #region 引用配置
- //Add reference to mscorlib
- var mscorlib = typeof(System.Object).Assembly;
- var systemCore = typeof(System.Linq.Enumerable).Assembly;
- scriptOptions = scriptOptions.AddReferences(mscorlib);
- scriptOptions = scriptOptions.AddReferences(systemCore);
- scriptOptions = scriptOptions.AddImports("System", "System.Linq", "System.Collections.Generic");
- #endregion
- var state = CSharpScript.RunAsync(@"int x=2;int y=3;int z =x*y;return z+1;");
- //int x=2 => 2
- string x = state.Result.GetVariable("x").Value.ToString();
- //return return z+1 => 7
- string retvalue = state.Result.ReturnValue.ToString();
- //Int32
- Type xtype = state.Result.GetVariable("x").Value.GetType();
- if(xtype.FullName == typeof(int).FullName)
- {
- }
- //int z =x*y => 6
- string z =state.Result.GetVariable("z").Value.ToString();
- string sourceCode = state.Result.Script.Code;
- string output = "";
- foreach (var p in state.Result.Variables)
- {
- output += string.Format("name:{0},type:{1},value:{2};", p.Name, p.Type, p.Value);
- }
- Console.WriteLine(output);
- #endregion
- #region 03 SyntaxTree
- var tree = CSharpSyntaxTree.ParseText(@"
- public class MyClass
- {
- public int FnSum(int x,int y)
- {
- return x+y;
- }
- }");
- var syntaxRoot = tree.GetRoot();
- var MyClass = syntaxRoot.DescendantNodes().OfType<ClassDeclarationSyntax>().First();
- var MyMethod = syntaxRoot.DescendantNodes().OfType<MethodDeclarationSyntax>().First();
- Console.WriteLine(MyClass.Identifier.ToString());
- Console.WriteLine(MyMethod.Identifier.ToString());
- Console.WriteLine(MyMethod.ParameterList.ToString());
- #endregion
5 宿主对象交互
- #region 04 Globals
- var state4 = CSharpScript.RunAsync(@"var ret = requestData + "" from globals""; ", globals: new Globals { requestData = "hello world" });
- Console.WriteLine( state4.Result.GetVariable("ret").Value);
- #endregion
- public class Globals
- {
- /// <summary>
- /// 可以在脚本中直接进行调用
- /// </summary>
- public string requestData { get; set; }
- }
Microsoft.CodeAnalysis 入门的更多相关文章
- VS2012 Unit Test——Microsoft Fakes入门
如题,本文主要作为在VS2012使用Fakes的入门示例,开发工具必须是VS2012或更高版本. 关于Fakes的MSDN地址:http://msdn.microsoft.com/en-us/libr ...
- Microsoft Hololens 入门系列-01-开篇
1.能做什么 Microsoft HoloLens是第一台运行Windows10系统的全息计算机,它已经不受任何限制——没有线缆和听筒,并且不需要连接电脑.Microsoft Hololens能够让你 ...
- Roslyn入门(二)-C#语义
先决条件 Visual Studio 2017 .NET Compiler Platform SDK Rosyln入门(一)-C#语法分析 简介 今天,Visual Basic和C#编译器是黑盒子:输 ...
- Roslyn 入门:使用 .NET Core 版本的 Roslyn 编译并执行跨平台的静态的源码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...
- Roslyn 入门:使用 Roslyn 静态分析现有项目中的代码
Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...
- Roslyn入门(一)-C#语法分析
演示环境 Visual Studio 2017 .NET Compiler Platform SDK 简介 今天,Visual Basic和C#编译器是黑盒子:输入文本然后输出字节,编译管道的中间阶段 ...
- SourceGenerator入门指北
SourceGenerator介绍 SourceGenerator于2020年4月29日在微软的.net blog首次介绍,大概说的是开发者编可以写分析器,在项目代码编译时,分析器分析项目既有的静态代 ...
- NET Core 1.0 RC2
NET Core 1.0 RC2 历险之旅 文章背景:对于.NET Core大家应该并不陌生, 从它被 宣布 到现在已经有1-2年的时间了,其比较重要的一个版本1.0 RC2 也即将发布..Net C ...
- 2018-8-29-Roslyn-静态分析
title author date CreateTime categories Roslyn 静态分析 lindexi 2018-08-29 09:10:19 +0800 2018-03-13 14: ...
随机推荐
- git多账号登录问题
作者:白狼 出处:http://www.manks.top/git-multiply-accounts.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...
- IIS8 使用FastCGI配置PHP环境支持 过程详解
平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...
- windows10安装mysql5.7.17是这样安装的吗?
操作 全允许
- VIM教程
vim 的环境设定参数 :set nu :set nonu 就是设定与取消行号啊! :set hlsearch :set nohlsearch hlsearch 就是 ...
- SQL Server2014 SP2关键特性
SQL Server2014 SP2关键特性 转载自:https://blogs.msdn.microsoft.com/sqlreleaseservices/sql-2014-service-pack ...
- 《Effective java》-----读书笔记
2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...
- mysql向表中某字段后追加一段字符串:
mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...
- iOS-----正则表达式的基础语法
正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...
- 学习ASP.NET Core,你必须了解无处不在的“依赖注入”
ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...
- JavaScript之单例实战
一.概述 所谓单例模式,顾名思义即一个类只有一个实例. 所以,当我们创建一个实例时,就必须判断其是否已经存在了这个实例,如果已经存在了这个实例,那么就返回这个已经存在的实例,无需再创建一个(单例模式嘛 ...