Roslyn: 是一个.NET 编译平台,支持C#, Nuget 包:Microsoft.CodeAnalysis.CSharp.dll.

C#动态编译代码,快速上手,代码如下:如题所示,报这个错误的解决办法:

var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(s => !s.IsDynamic && !string.IsNullOrEmpty(s.Location));

项目

public string Execute(string code){try{string id = "demo1";var assemblies = AppDomain.CurrentDomain.GetAssemblies().Where(s => !s.IsDynamic && !string.IsNullOrEmpty(s.Location));var refs = assemblies.Select(x => MetadataReference.CreateFromFile(x.Location));var compilation = CSharpCompilation.Create($"{id}.dll").WithOptions(new CSharpCompilationOptions(Microsoft.CodeAnalysis.OutputKind.DynamicallyLinkedLibrary,usings: null,optimizationLevel: OptimizationLevel.Release,checkOverflow: false,allowUnsafe: true,platform: Platform.AnyCpu,warningLevel: 4,xmlReferenceResolver: null)).AddReferences(refs).AddSyntaxTrees(CSharpSyntaxTree.ParseText(code));using (var ms = new MemoryStream()){var result = compilation.Emit(ms);if (result.Success){ms.Seek(0, SeekOrigin.Begin);var assembly = Assembly.Load(ms.ToArray());var invokeType = assembly.GetTypes().First(x => x.Name == "CSCode");var dynamicType = Activator.CreateInstance(invokeType);return (string)invokeType.GetMethod("Execute").Invoke(dynamicType, new object[] {  new MyClass(){ Id="1111"} });}var error = new StringBuilder();foreach (var t in result.Diagnostics){error.AppendLine($"{t.GetMessage()}");}return error.ToString();}}catch (Exception ex){return ex.Message;}}

准备的待编译class文件代码如下:

using Newtonsoft.Json;
namespace DynamicExpresso.Services
{public class CSCode{class MsgInfo{public string Id { get; set; }public string DisplayCode { get; set; }public string DisplayName { get; set; }}public string Execute(MyClass classObj){// 获取对象, 测试MsgInfo msgInfo = JsonConvert.DeserializeObject<MsgInfo>(classObj.Demo);string redisKey = msgInfo.Id;//访问Redis测试bool redisResult = RedisHelper.Set(redisKey, "hello,world#!@#", 1000);string result = RedisHelper.Get(redisKey);//访问数据库测试var dataBaseRepo = new RepositoryBase<MyClass>();var collections=  dataBaseRepo.Query(x => x.Id == "123");return JsonConvert.SerializeObject(collections);}}
}

实际测试:动态代码编译后,并非同所在工程隔离,且是利用了所在项目工程的上下文运行时环境,处于同一个AppDomain中(注意命名空间保持一致) 。

Roslyn:The invoked member is not supported in a dynamic assembly.相关推荐

  1. out参数不用赋值?这么神奇吗!

    首先提醒大家一下,docs.microsoft.com上的<C# 指南>是这样描述out 参数修饰符[1]的: 作为 out 参数传递的变量在方法调用中传递之前不必进行初始化.但是,被调用 ...

  2. Java中常见的单词

    abstract (关键字)             抽象 ['.bstr.kt]  access                            vt.访问,存取 ['.kses]'(n.入口 ...

  3. 【计算机基础】中英文常用名词对照

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

  4. java必备英语单词

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

  5. java常用英语单词

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

  6. 【转】Java 专业词汇

    原址:http://blog.csdn.net/xiaojunjuns1/article/details/52729861 abstract (关键字)             抽象 ['.bstr. ...

  7. 11、java常用单词(转载)

    abstract (关键字) 抽象 ['.bstr.kt] access vt.访问,存取 ['.kses]'(n.入口,使用权) algorithm n.算法 ['.lg.riem] annotat ...

  8. java中常见的英语单词

    abstract (关键字)             抽象 ['.bstr.kt]  access                            vt.访问,存取 ['.kses]'(n.入口 ...

  9. 【强化学习】解决gym安装Atari2600环境gym[atari,accept-rom-license] RuntimeError 无法下载Roms的问题

    先上Roms.tar.gz安装地址:Roms.tar.gz 以下内容是解决问题的思路,如果已经完全知道问题原因可以直接跳过 安装gym[accept-rom-license]时会出现安装失败的情况: ...

最新文章

  1. vijos 1512 SuperBrother打鼹鼠
  2. juniper防火墙做ipsec ***必须开放的端口
  3. docker 镜像的使用和下载
  4. 【缺迪杰斯特拉和SPFA] 文巾解题 787. K 站中转内最便宜的航班
  5. sklearn自学指南(part61)--调整估计器的超参数
  6. 网络经济与企业管理(第 2 章:企业战略管理)
  7. [Sdoi2010] 地精部落
  8. babylonjs 设置面板位置_一篇关于开关面板的详细集合,值得收藏转发
  9. python案例实操_用案例实操学习Python ,培养编程逻辑思维
  10. ROS入门笔记(十三):分布式通信
  11. 硬核 App,这项新功能一定要打开,关键时刻能救命!!
  12. C#算法 质因数 最大公约数与最小公倍数
  13. 去掉ul标签前的小圆点
  14. js复制隐藏域中的文字
  15. .tar.gz和.tar.bz2解压命令
  16. HTML颜色表及html代码(前端必备)
  17. 文件及代码代码命名规则
  18. 论文中定性分析与定量分析的写作手法
  19. 如何解决个人信息泄露问题
  20. 解决WIN10系统电脑右下角网络图标不见网络无法连接的方法总结(2021.1030)

热门文章

  1. 计算机组成原理——作业2
  2. 《Arduino开发实战指南:LabVIEW卷》6.6 基于Arduino的弹珠游戏
  3. 动态生成布局html,HTML5应用开发:神奇的动态布局库isotope教程
  4. JMockit使用总结
  5. 电信网络管家APP功能介绍、外网远程桌面
  6. GeoLite2/GeoIP2---简单的ip地址定位
  7. 唯智信息WMS:让制造业仓库管理更智能
  8. 递归、回溯-图的m着色问题
  9. python3 中文手册
  10. 时间序列预测方法的使用(简单、加权时序,简单加权移动,一次二次三次指数平滑法)