Natasha icon indicating copy to clipboard operation
Natasha copied to clipboard

4.2 demo 无法使用。代码也不对。

Open daonidedie opened this issue 3 years ago • 7 comments

引用Natasha.CSharp, Version=4.2.0.0

执行以下代码 ` public void TestCorder() {

        //NatashaInitializer.Preheating();
        NatashaManagement.Preheating();
        //增加全局的 Using 引用
        NatashaManagement.AddGlobalUsing("System");
        NatashaManagement.AddGlobalUsing("System.IO");
        //使用 Natasha 的 CSharp 编译器直接编译字符串
        AssemblyCSharpBuilder sharpBuilder = new AssemblyCSharpBuilder(); 
        //给编译器指定一个随机域
        //sharpBuilder.Domain = DomainManagement.Random();

        sharpBuilder.UseNatashaFileOut("c:/output");

        //如果代码编译错误,那么抛出并且记录日志。
        sharpBuilder.CompileFailedEvent += (compilation, errors) =>
        {
            var errorLog = compilation.Assembly;
        };


        //添加你的字符串
        sharpBuilder.Add("using System; public static class Test{ public static void Show(){ Console.WriteLine(\"Hello World!\");}}");
        //编译出一个程序集
        var assembly = sharpBuilder.GetAssembly();


        //如果你想直接获取到类型
        var type = sharpBuilder.GetTypeFromShortName("Test");
        //或
        type = sharpBuilder.GetTypeFromFullName("xxNamespace.xxClassName");

//创建一个 Action 委托 //必须在同一域内,因此指定域 //写调用脚本,把刚才的程序集扔进去,这样会自动添加using引用 var action = NDelegate.UseDomain(sharpBuilder.Domain).Action("Test.Show();");//, assembly

        //运行,看到 Hello World!
        action();

    }`

报错: image

daonidedie avatar Jul 25 '22 05:07 daonidedie

如果找不到引用,就引入环境包.

NMSAzulX avatar Jul 25 '22 05:07 NMSAzulX

文档里有个用前必看的章节, 你没看.

NMSAzulX avatar Jul 25 '22 05:07 NMSAzulX

上面问题解决了,引用了那个包。 但是我用demo 代码来进行域操作也好像不能正常运行。 https://natasha.dotnetcore.xyz/zh-Hans/docs/core_component/domain/assembly ` var domain = DomainManagment.Random; var type = NDomain.Create(domain).GetType("public class A{ public A(){Name="1"; }public string Name;}"); var func = NDomain.Create(domain).Func("return (new A()).Name;"); Console.WriteLine(func()); // result : 1

        type.RemoveReferences();  //如果不移除,下次引用A的时候会出现二义性
        type = NDomain.Create(domain).GetType("public class A{ public A(){Name=\"2\"; }public string Name;}");
        func = NDomain.Create(domain).Func<string>("return (new A()).Name;");
        Console.WriteLine(func());  // result : 2`

daonidedie avatar Jul 25 '22 05:07 daonidedie

NDomain 没有了,而且 4.2 里 GetType("public class A{ public A(){Name="1"; }public string Name;}") 这种代码好像都没有办法运行不知道是不是需要引用其它的包

daonidedie avatar Jul 25 '22 05:07 daonidedie

NDomain 现在是 NatashaDomain , 已经改版了. 我去更新一下文档

NMSAzulX avatar Jul 25 '22 06:07 NMSAzulX

https://www.cnblogs.com/NMSLanX/p/15799203.html 域插件操作 参考这篇文章

NMSAzulX avatar Jul 25 '22 06:07 NMSAzulX

收到谢谢

daonidedie avatar Jul 25 '22 06:07 daonidedie