2012-11-09 56 views
4

在C#中是否有將函數的源代碼轉換爲字符串的方法?有點像在JavaScript中如何完成。我需要這個,因爲我正在爲Asp.Net控件編寫一些文檔,並希望在結果旁邊顯示原始源代碼,而不需要複製/粘貼它。C#將函數源代碼轉換爲字符串

+5

聽起來像一個反射問題。我個人只會讀取源文件 –

回答

4

簡答題:沒有。

長答案:您可以在編譯時使用MSBuild任務,T4模板或手動解析東西來生成某些東西,或者使用Roslyn爲您解析它。

如果您在運行時需要源代碼,那麼您肯定需要將cs文件包含在部署的東西中,因爲沒有穩定的方式來獲取代碼。 (你可以嘗試運行時編譯不過,但是看起來「醜陋」,而不是非常精確。)

0

的作弊方式:

包括在項目中的.cs文件,並從閱讀。

+0

這不會是微不足道的。每個函數都需要使用反射來訪問自己的類型,您需要在.cs文件中找到該類型的定義(或者在部分類中定義該類型),然後在該定義中找到相應的成員。這都是*可能的*,但是這需要很多工作。除此之外,如果您想處理一般情況,您基本上需要創建自己的C#解析器。 – Servy

+0

@Servy:你不需要編寫自己的C#解析器。有羅斯林。 – TDaver

+0

@TDaver我認爲這仍然是測試?它正式發佈了嗎? – Servy

0

聽起來就像你希望函數在運行時執行一個任務,將它的源代碼寫入文本文件。這是不可能的,因爲函數在運行時會作爲ASSEMBLY(或二進制)運行。

但是,您可能具備的功能讀取然後某處它的源代碼的副本寫別的地方

0

您可以將C#編譯器作爲單獨的進程運行(它是.Net Framework的一部分,可免費使用 - 執行syn然後加載生成的程序集或加載生成的程序集或使用正確的方法發送IL代碼(首先,您必須先生成「真實」IL代碼,以便爲您準備此類小模板 - 僅編寫c#類並檢查生成的IL代碼的外觀)。檢查你是否有適當的權限來做到這一點。

樣品散發出的用法是這裏實例(我寫了前一段時間): http://bitcare.codeplex.com/SourceControl/changeset/view/21192#366441

相關問題