2010-10-12 128 views
1

我在網上看過C#如何讓你在運行中編譯代碼,我認爲這真是一件很棒的事情。我需要爲我的項目使用此功能。但這是問題。我沒有試圖動態地編譯整個函數或新程序。我只需要調用一條語句來即時創建或刪除東西。我可以作爲腳本執行單個C#語句嗎?

C#能夠編譯和/或運行單個代碼語句並允許該語句作用於當前程序範圍內的變量和對象嗎?

感謝

+0

這聽起來像你要找的是什麼即時窗口:http://msdn.microsoft.com/en-us/library/f177hahy(v=VS.90 ).aspx但是,在程序運行時,我從未將它用於* new *功能。 – 2010-10-12 04:51:23

+0

這可能是有用的:http://www.mono-project.com/CsharpRepl – Foole 2010-10-12 05:39:56

回答

2

你可以編譯使用Microsoft.CSharp.CSharpCodeProvider C#,但如果你想這樣做是正確的是變得非常複雜,因爲你需要加載你的代碼在一個單獨的應用程序域,以防止內存泄漏。

我建議使用IronPython的或一些其他DLR語言:http://www.codeplex.com/wikipage?ProjectName=IronPython

這裏一些樣品,不知道如何跟上時代的它,但這個想法幾乎是相同的:http://www.voidspace.org.uk/ironpython/dlr_hosting.shtml

0

「我只需要調用一條語句即可創建或刪除即時消息。「像這些發言讓我不寒而慄。你想在這裏完成什麼,真的嗎?您希望讓您的用戶編寫C#語句並讓您的程序在其AppDomain中執行它們?這不僅是一個巨大的安全風險,它也是一個可怕的用戶體驗。

此外,C#不是腳本語言。如果你試圖讓它成爲一個,你會有一個不好的時間(TM)。

+1

詹姆斯:這取決於用戶是誰。VS在調試監視窗口或立即窗口中運行用戶編寫的C#代碼時沒有問題。據推測,OP正在編寫一個應用程序,讓用戶輸入代碼,而不是從互聯網下載。 – Gabe 2010-10-12 05:00:37

+0

我認爲即使是這樣的情況,它仍然是非常合法的用途,並且帶有CAS的C#與在瀏覽器中運行的JavaScript一樣安全。儘管如此,除非他真的希望C#,否則我會使用DLR語言。 http://en.wikipedia.org/wiki/Code_Access_Security – 2010-10-12 05:47:51

+0

@Rei:好點。我同意,應該使用DLR解決方案或其他用於腳本編寫的其他語言。 – 2010-10-12 14:50:57

0

你可以在使用調試器時。在斷點處,只需在VS的即時窗口中輸入一些代碼,然後輸入中提琴。

有一個最好的調試功能!

0

腳本靜態語言是折中的。需要考慮的範圍和安全問題,但是可以控制。

如果您希望從管理運行時執行靜態代碼(即C#),我建議從Mono開始。 Mono團隊已經邁出了大步,創造了一個安全的環境,以便在運行時將JIT代碼編譯爲本機代碼。

Start with their official post on the subject.

0

這取決於你正在嘗試做的...如果你正在尋找使用它作爲一個嵌入式腳本語言另一個應用程序中,那麼我的回答不適用,但如果你只是想執行隨機的C#語句(或者程序,如果你喜歡的話)並將它們保存爲腳本,LinqPad對此非常棒。

相關問題