2009-03-06 18 views
2

我在C#中編寫了一個小腳本引擎,我在想,是否有某種#compiler指令或某種其他頭文件類型的文件,我可以用我的腳本文件編譯來定義我的腳本文件是什麼託管Dll引用?.Net腳本引擎(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);
並把我的腳本信息,而不是。問題是我不一定知道腳本將要引用的.dll文件。我目前的解決方案是解析一個自定義的「script.cs.refs」文件,它看起來像這樣:
"System.dll","System.Data.dll","SomeOther.dll","Ect.dll"
任何幫助找出visual studio存儲您對dll的引用的位置,以及它是否必須在單獨的文件中定義,如果有一個標準化的格式,我應該使用,我可以加載到告訴它這個信息的編譯器,將不勝感激!

回答

3

您不能在C#源代碼中指定程序集引用,no。

當Visual Studio構建項目時,Visual Studio會將項目中的引用傳遞給編譯器。

請注意,使用命令行時,有一個包含一堆選項的response file的概念。這可以在命令行中指定,或者在.NET框架目錄中有一個默認的csc.resp文件,其中包含引用的默認選項,但我懷疑這是從CSharpCodeProvider使用的。

你可能有自己的「特別評論」的格式,它列出了參考 - 解析你已經給搶這些引用的腳本,然後把它們放到

+0

這就是我害怕的,我想我現在可以在腳本文件頂部的評論中定義這些信息...... – Fox 2009-03-06 10:06:18

2

我不認爲有。是一個標準的解決方案,除了你可以採用類似於ASP.NET的方法來引用源文件中定義的程序集。

你會那麼需要

  1. 分析源代碼文件找到集引用
  2. 它們傳遞到CompilerParameters
  3. 確保定義在源代碼中引用的行不產生編譯錯誤。

要實現3.,您可以在註釋中定義引用。例如

//@ Assembly name="SomeOther.dll" 

然後,您可以將這些// @行的sourcode文件正則表達並解析出程序集名稱。