1 安装 Microsoft.CodeAnalysis

我这里创建的是WPF的项目,首先再VS2015中用NuGet控制台进行安装

Install-Package Microsoft.CodeAnalysis

Install-Package Microsoft.CodeAnalysis.CSharp.Scripting

2 using 添加

  1. using Microsoft.CodeAnalysis.Scripting;
  2. using Microsoft.CodeAnalysis.CSharp.Scripting;
  3. using Microsoft.CodeAnalysis.CSharp;
  4. using Microsoft.CodeAnalysis.CSharp.Syntax;

3 Hello World

  1. #region 01 Hello world
  2. //Hello Rolysn
  3. Console.WriteLine(CSharpScript.RunAsync(
  4. @"string ret =""Hello Rolysn"";")
  5. .Result.GetVariable("ret").Value);
  6.  
  7. #endregion

4 引用和命名空间

  1. #region 02 References and Namespaces
  2. ScriptOptions scriptOptions = ScriptOptions.Default;
  3. #region 引用配置
  4. //Add reference to mscorlib
  5. var mscorlib = typeof(System.Object).Assembly;
  6. var systemCore = typeof(System.Linq.Enumerable).Assembly;
  7. scriptOptions = scriptOptions.AddReferences(mscorlib);
  8. scriptOptions = scriptOptions.AddReferences(systemCore);
  9. scriptOptions = scriptOptions.AddImports("System", "System.Linq", "System.Collections.Generic");
  10. #endregion
  11. var state = CSharpScript.RunAsync(@"int x=2;int y=3;int z =x*y;return z+1;");
  12. //int x=2 => 2
  13. string x = state.Result.GetVariable("x").Value.ToString();
  14. //return return z+1 => 7
  15. string retvalue = state.Result.ReturnValue.ToString();
  16. //Int32
  17. Type xtype = state.Result.GetVariable("x").Value.GetType();
  18. if(xtype.FullName == typeof(int).FullName)
  19. {
  20.  
  21. }
  22. //int z =x*y => 6
  23. string z =state.Result.GetVariable("z").Value.ToString();
  24.  
  25. string sourceCode = state.Result.Script.Code;
  26.  
  27. string output = "";
  28. foreach (var p in state.Result.Variables)
  29. {
  30. output += string.Format("name:{0},type:{1},value:{2};", p.Name, p.Type, p.Value);
  31. }
  32. Console.WriteLine(output);
  33. #endregion
  1. #region 03 SyntaxTree
  2. var tree = CSharpSyntaxTree.ParseText(@"
  3. public class MyClass
  4. {
  5. public int FnSum(int x,int y)
  6. {
  7. return x+y;
  8. }
  9. }");
  10.  
  11. var syntaxRoot = tree.GetRoot();
  12. var MyClass = syntaxRoot.DescendantNodes().OfType<ClassDeclarationSyntax>().First();
  13. var MyMethod = syntaxRoot.DescendantNodes().OfType<MethodDeclarationSyntax>().First();
  14.  
  15. Console.WriteLine(MyClass.Identifier.ToString());
  16. Console.WriteLine(MyMethod.Identifier.ToString());
  17. Console.WriteLine(MyMethod.ParameterList.ToString());
  18. #endregion

5  宿主对象交互

  1. #region 04 Globals
  2.  
  3. var state4 = CSharpScript.RunAsync(@"var ret = requestData + "" from globals""; ", globals: new Globals { requestData = "hello world" });
  4. Console.WriteLine( state4.Result.GetVariable("ret").Value);
  5.  
  6. #endregion
  1. public class Globals
  2. {
  3. /// <summary>
  4. /// 可以在脚本中直接进行调用
  5. /// </summary>
  6. public string requestData { get; set; }
  7.  
  8. }

Microsoft.CodeAnalysis 入门的更多相关文章

  1. VS2012 Unit Test——Microsoft Fakes入门

    如题,本文主要作为在VS2012使用Fakes的入门示例,开发工具必须是VS2012或更高版本. 关于Fakes的MSDN地址:http://msdn.microsoft.com/en-us/libr ...

  2. Microsoft Hololens 入门系列-01-开篇

    1.能做什么 Microsoft HoloLens是第一台运行Windows10系统的全息计算机,它已经不受任何限制——没有线缆和听筒,并且不需要连接电脑.Microsoft Hololens能够让你 ...

  3. Roslyn入门(二)-C#语义

    先决条件 Visual Studio 2017 .NET Compiler Platform SDK Rosyln入门(一)-C#语法分析 简介 今天,Visual Basic和C#编译器是黑盒子:输 ...

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

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够编译并执行我们的代码. 作为 Roslyn 入门篇文章之一,你将可以通过本文学习如何开始编写一 ...

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

    Roslyn 是微软为 C# 设计的一套分析器,它具有很强的扩展性.以至于我们只需要编写很少量的代码便能够分析我们的项目文件. 作为 Roslyn 入门篇文章,你将可以通过本文学习如何开始编写一个 R ...

  6. Roslyn入门(一)-C#语法分析

    演示环境 Visual Studio 2017 .NET Compiler Platform SDK 简介 今天,Visual Basic和C#编译器是黑盒子:输入文本然后输出字节,编译管道的中间阶段 ...

  7. SourceGenerator入门指北

    SourceGenerator介绍 SourceGenerator于2020年4月29日在微软的.net blog首次介绍,大概说的是开发者编可以写分析器,在项目代码编译时,分析器分析项目既有的静态代 ...

  8. NET Core 1.0 RC2

    NET Core 1.0 RC2 历险之旅 文章背景:对于.NET Core大家应该并不陌生, 从它被 宣布 到现在已经有1-2年的时间了,其比较重要的一个版本1.0 RC2 也即将发布..Net C ...

  9. 2018-8-29-Roslyn-静态分析

    title author date CreateTime categories Roslyn 静态分析 lindexi 2018-08-29 09:10:19 +0800 2018-03-13 14: ...

随机推荐

  1. git多账号登录问题

    作者:白狼 出处:http://www.manks.top/git-multiply-accounts.html 本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文 ...

  2. IIS8 使用FastCGI配置PHP环境支持 过程详解

    平时帮朋友们配置过一些PHP环境的服务器,但是一直使用的都是Apache HTTP+PHP,今天呢,我吧IIS+PHP配置方式给大家发一下下~呵呵. 在这里,我使用的是FastCGI模块映射的方式配置 ...

  3. windows10安装mysql5.7.17是这样安装的吗?

    操作 全允许

  4. VIM教程

    vim 的环境设定参数 :set nu :set nonu             就是设定与取消行号啊! :set hlsearch :set nohlsearch     hlsearch 就是 ...

  5. SQL Server2014 SP2关键特性

    SQL Server2014 SP2关键特性 转载自:https://blogs.msdn.microsoft.com/sqlreleaseservices/sql-2014-service-pack ...

  6. 《Effective java》-----读书笔记

    2015年进步很小,看的书也不是很多,感觉自己都要废了,2016是沉淀的一年,在这一年中要不断学习.看书,努力提升自己!预计在2016年要看12本书,主要涉及java基础.Spring研究.java并 ...

  7. mysql向表中某字段后追加一段字符串:

    mysql向表中某字段后追加一段字符串:update table_name set field=CONCAT(field,'',str) mysql 向表中某字段前加字符串update table_n ...

  8. iOS-----正则表达式的基础语法

    正则表达式简单语法总结 一.什么是正则表达式 从概念上来说,正则表达式也是一门小巧而精炼的语言,它可以用来简化检索特定的字符串,替换特定字符等功能,有许多开发语言工具,都内嵌支持正则表达式.那么一个正 ...

  9. 学习ASP.NET Core,你必须了解无处不在的“依赖注入”

    ASP.NET Core的核心是通过一个Server和若干注册的Middleware构成的管道,不论是管道自身的构建,还是Server和Middleware自身的实现,以及构建在这个管道的应用,都需要 ...

  10. JavaScript之单例实战

    一.概述 所谓单例模式,顾名思义即一个类只有一个实例. 所以,当我们创建一个实例时,就必须判断其是否已经存在了这个实例,如果已经存在了这个实例,那么就返回这个已经存在的实例,无需再创建一个(单例模式嘛 ...