2009-04-02 16 views
1

私のコードを私のアプリケーションでコンパイルされていないフォームに入れて、それを即座に変更してアプリケーションが新しいバージョンを使用する可能性はありますか?.NETの動的コンパイル済みプラグイン

CodeDOMを使用していることが知られている場合は、(コード保護の問題を除いて)このアプローチを使用してプラグイン可能であることに注意してください。

私は再利用できる例がありますか?

+0

あなたが解決しようとしている実際の問題を記述することができます... –

+0

ちょうどその。ダイナミックプラグイン。簡単な変更のためにアプリケーションを再デプロイしたくない。 –

答えて

6

CodeDOMの使い方を知っていると言われています。

あなたがC#コードであることに満足しているなら、CSharpCodeProviderは素晴らしい仕事をします。より冒険的な気持ちが感じられる方は、Boo - read Ayende Rahien's book on building DSLs in Booとお考えください。

CSharpCodeProviderを使用する例として、C# in Depth web siteからSnippyをダウンロードできます。基本的にSnippyでは、コードスニペットを入力してクラスを宣言しなくても実行できます。コードをビルドして実行するよりもはるかに簡単な例です:

さらに多くの例、search for CSharpCodeProvider on Stack Overflow。ここでは、短いが完全な "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); 
    } 
} 
+0

原因があまりにも困難です。例はありますか? –

+2

本当にそれほど難しいことではありません。あなたがそれを試して、つまってしまったら、あなたは特定の質問をすることをお勧めします。まだ試していないのであれば、いくつかのチュートリアルを見つけることをお勧めします。そこには*負荷*があります。 –

+0

編集のために感謝のトン:) –

関連する問題