roslyn 生成代码_delphi反编译为源码

roslyn 生成代码_delphi反编译为源码Roslyn是微软公司开源的.NET编译器。编译器支持C#和VisualBasic代码编译,并提供丰富的代码分析API。GITHUB地址:https://github.com/dotnet/roslyn.gitRoslyn在vs2013上通过在ManageNuGetPackages中下载安装Microsoft.CodeAnalysis、Microsoft.

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺



Roslyn 是微软公司开源的 .NET 编译器。编译器支持 C# 和 Visual Basic 代码编译,并提供丰富的代码分析 API。
GITHUB地址:https://github.com/dotnet/roslyn.git

Roslyn在vs2013上通过在 Manage NuGet Packages 中下载安装Microsoft.CodeAnalysis、Microsoft.CodeAnalysis.CSharp、Microsoft.CodeAnalysis.VisualBasic组件以后,
便可以在C#项目和VB项目中使用Roslyn的API。

roslyn 生成代码_delphi反编译为源码

下面是一段使用Roslyn API编写的C#编译器。

public class CSharpScriptEngine
    {
        private static Script _previousInput;
        private static Lazy<object> _nextInputState = new Lazy<object>();
        private static ScriptOptions _options;


        public static void AddReferenceAndNameSpace(string[] assemblys,string[] namespaces)
        {
            ScriptOptions _option = ScriptOptions.Default;
            if (assemblys != null && assemblys.Length > 0)
            {
                foreach (string item in assemblys)
                {
                    var type = Type.GetType(item);
                    if (type == null)
                    {
                        type = AppDomain.CurrentDomain.GetAssemblies().FirstOrDefault(obj => obj.GetType(item) != null).GetType(item);
                    }
                    _option=_option.AddReferences(Assembly.GetAssembly(type));
                }
            }


            if (namespaces != null && namespaces.Length > 0)
            {
                _option=_option.AddNamespaces(namespaces);
            }


            _options = _option;
        }


        public static object Execute(string code)
        {
            var script = CSharpScript.Create(code, ScriptOptions.Default).WithPrevious(_previousInput).WithOptions(_options);
            var endState = script.Run(_nextInputState.Value);
            _previousInput = endState.Script;
            _nextInputState = new Lazy<object>(() => endState);
            return endState.ReturnValue;
        }


    }

通过调用CSharpScriptEngine中的Execute方法来实现在项目的代码实现期动态的编译我们输入的C#代码,
编译后的代码似乎并不嵌入到原代码(编译以后)中,所以我们需要指定引入代码中需要的Assembly和Namespace,
AddReferenceAndNameSpace方法便是在做这件事。

下面写个简单的测试代码来测试上面的编译器是否可以正常工作。

public void TestCSharpScriptEngine()
        {
            string script = @"
            PowerShellEngine.Invoke(""Get-Date"",null)
            ";


            string[] assemblys = { "MyWebProjectService.CSharpScriptEngine", "System.Management.Automation.PSObject", "System.Collections.ObjectModel.Collection`1" };
            string[] namespaces = { "MyWebProjectService" };
            CSharpScriptEngine.AddReferenceAndNameSpace(assemblys,namespaces);
            Collection<PSObject> result = (Collection<PSObject>)CSharpScriptEngine.Execute(script);


        }

测试代码中我们动态给加入我们自己写的C#代码 “PowerShellEngine.Invoke(“”Get-Date””,null)” 调用PowerShellEngine
类的Invoke方法来执行一个Get-Date命令。

这里有篇文章比较详细的介绍了Roslyn API的各种用法:http://www.daveaglick.com/posts/compiler-platform-scripting

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/195777.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle字符串自身去重,oracle拼接字符串函数(去重和不去重)「建议收藏」

    oracle字符串自身去重,oracle拼接字符串函数(去重和不去重)「建议收藏」oracle拼接字符串函数(去重和不去重)1.不去重FUNCTIONf_linkFunctionf_linkCREATEORREPLACEFUNCTIONf_link(p_strVARCHAR2)RETURNVARCHAR2PARALLEL_ENABLEAGGREGATEUSINGt_link;Typet_linkCREATEORREPLACETYPET_LINK…

    2022年9月20日
    0
  • 基于阿里DDNS的ipv6 for windows版软件

    基于阿里DDNS的ipv6 for windows版软件基于阿里DDNS的ipv6forwindows版软件会搜到这篇帖子的同学,应该和我一样,满世界为自己的虚拟主机找寻ipv6的动态ddns程序吧?下面我先说说我的折腾故事:因为买了群晖,然后发现需要公网ip,但公网ip现在电信要钱了,开口100元一个月,挺黑的。没办法尝试了各种内网穿透,这类帖子网上很多,就不细说了,总之是各种折腾,各种不爽,最终选择了零遁伴侣做内网穿透还算稳定,速度也不错。…

    2022年6月13日
    35
  • java 输出格式_java格式化输出方法「建议收藏」

    java 输出格式_java格式化输出方法「建议收藏」##Java中实现格式化输出的几种方式:1、System.out.printf();类似于c语言的printf方法。如:intx=55;System.out.format(“x=%5x”,x);输出结果为:x=372、System.out.format()intx=55;System.out.printf(“x=%5c”,x);输出结果为:x=73、St…

    2022年7月8日
    18
  • linux安装ssh和开启 ssh服务

    1.查看ssh服务的状态输入以下命令:sudoservicesshdstatus如果出现Loaded:error(Reason:Nosuchfileordirectory)提示的话,说名没有安装ssh服务,按照第二步:安装ssh服务。如果出现Active:inactive(dead)说明已经安装了ssh服务,但

    2022年4月14日
    46
  • webstorm整理代码格式快捷键_电脑上的快捷键有哪些

    webstorm整理代码格式快捷键_电脑上的快捷键有哪些centOS下webstorm格式化代码的快捷键Ctrl+Shift+lwindows下webstorm格式化代码的快键键Ctrl+Alt+lmac下webstorm格式化代码的快捷键Option+Command+l

    2022年5月3日
    72
  • 7000笔记本性价比之王(三千元笔记本性价比之王)

    PC市场的出货量频繁爆低,并不意味着这一市场走衰,其依旧是大部分人日常办公和外出携带办公所不可或缺的电子产品。只是换新欲望不强烈,面对并不了解的产品时过于保守的购买态度,严重影响了消费者在更换笔记本电脑的“快、准、狠”。但若真有购机需求时,看到各个价位的各种机型,又无从下手。说多了都是泪啊…哎…不容易~作为90后编辑和在大城市打拼的各位一样,就是个“小白领”。交了房租水电,买了油米泡面。发现,这个…

    2022年4月10日
    68

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号