.NET中的动态编译插件

Ali*_*zmi 1 .net c# plugins dynamic

我是否有可能将我的一些代码以非编译形式放入我的应用程序中,然后即时对其进行更改,然后应用程序可以直接使用新版本?

如果可能(我秘密知道它使用CodeDOM),是否有任何问题需要注意使用这种方法进行可插拔性(除了代码保护问题)?

有可用的例子我可以重复使用吗?

Jon*_*eet 6

你已经说过你知道如何使用CodeDOM - 为什么不使用它?

如果你对它是C#代码感到满意,那就CSharpCodeProvider做一个令人钦佩的工作.如果您有更多的冒险精神,您可能需要考虑Boo - 阅读Ayende Rahien关于在Boo中构建DSL的书籍,以获取更多信息和建议.

有关使用的示例CSharpCodeProvider,您可以从我在深度网站的C#中下载Snippy .基本上Snippy允许你键入代码片段并运行它,而不必费心去声明类等.它没有比构建和运行代码更多的功能,所以它是一个非常方便的例子:)

有关更多示例,请在Stack Overflow上搜索CSharpCodeProvider.这是一个简短但完整的代码 - "hello world"的代码被编译然后执行.

using System;
using System.CodeDom.Compiler;
using Microsoft.CSharp;

class Test
{
    public static void Main(string[] args)
    {
        string code = @"
using System;

class CodeToBeCompiled
{
    static void Main()
    {
        Console.WriteLine(""Hello world"");
    }
}";

        var codeProvider = new CSharpCodeProvider();
        var parameters = new CompilerParameters
        {
            GenerateExecutable = true,
            OutputAssembly = "Generated.exe"
        };
        var results = codeProvider.CompileAssemblyFromSource
            (parameters, new[] { code });
        results.CompiledAssembly.EntryPoint.Invoke(null, null);
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 这真的不是那么难.如果你已经尝试过并且卡住了,我建议你问一个具体的问题.如果你还没有尝试过,我建议你找一些教程 - 那里有*load*. (2认同)