2009-03-06 6 views
2

私はC#で小さなスクリプトエンジンを作っていますが、何らかの#compilerディレクティブやその他のヘッダーのようなファイルがあります。私のスクリプトファイルでコンパイルして、管理されたDllのスクリプトファイルを定義できますか?参照していますか?.Net Scripting Engine(C#) - .Net言語用の「ヘッダーファイル」または「dll参照ファイル」がありますか?

public static CompilerResults LoadScript(
    string SourceCodeFile, string[] References) 
{ 
    var Parameters = new CompilerParameters() 
    { 
     GenerateExecutable = false, 
     GenerateInMemory = true, 
     IncludeDebugInformation = false, 
    }; 

    Parameters.ReferencedAssemblies.AddRange(References); 

    return CSharpCodeProvider.CreateProvider(
     CSharpCodeProvider.GetLanguageFromExtension(
      Path.GetExtension(SourceCodeFile))) 
       .CompileAssemblyFromFile(Parameters, SourceCodeFile); 
}
私はこのコード行排除することができるのが大好きだ

Parameters.ReferencedAssemblies.AddRange(References);
をし、代わりに私のスクリプトでその情報を置きます。問題は、スクリプトが参照するものが何であるかを必ず事前に知っているというわけではありません。私の現在の解決策は、次のようなカスタム "script.cs.refs"ファイルを解析することです:
"System.dll","System.Data.dll","SomeOther.dll","Ect.dll"
Visual Studioがdllへの参照をどこに格納するのか、別のファイル標準化された形式があれば、この情報を伝えるコンパイラに読み込むことができるはずです。大いに感謝します!

答えて

3

C#ソースコード内でアセンブリ参照を指定することはできません。

Visual Studioはプロジェクトのビルド時にプロジェクト内の参照をコンパイラに渡します。

コマンドラインを使用するときには、多くのオプションを含むresponse fileという概念があります。これはコマンドラインで指定することもできますし、参照を含むデフォルトのオプションを持つデフォルトのcsc.respファイルが.NETフレームワークディレクトリにありますが、それはCSharpCodeProviderから使用されているのでしょうか。あなたはこれらの参照をつかむために与えられてきたスクリプトを解析し、その後にそれらを渡す

+0

これは私が恐れていたことですが、今のところスクリプトファイルの先頭のコメントにその情報を定義できると思います... – Fox

2

私はそこにはないと思うが -

あなたは潜在的に参照を一覧表示し、独自の「特別のコメント」形式を持つことができます。ソースファイルで定義されたアセンブリへの参照を持つASP.NETのようなアプローチをとることができる点を除いて、これに対する標準的な解決策です。

あなたはその後、アセンブリを見つけるために、ソースコードファイルが

  • は、ソースコード内の参照を定義する行が発生していないことを確認してください
  • CompilerParametersに渡す参照

    1. 解析する必要がありますエラーをコンパイルします。

    3.を達成するには、コメントで定義された参照を持つことができます。例えば

    //@ Assembly name="SomeOther.dll" 
    

    これらの//行に対してsourcodeファイルを正規表現し、アセンブリ名を解析することができます。

  • 関連する問題