2010-08-28 43 views
2

我需要在基於.NET的EXE中注入一個自定義的唯一靜態字符串。對於所有意圖和目的,假設這是我的PKI的私鑰。從源代碼動態創建一個編譯的.NET EXE文件?

關於如何在C#源代碼中保護私鑰,我有幾點想法,我的問題是如何獲取.CS文件並創建基於它的可執行文件?

+0

csc /out:My.exe MyFile.cs? – kd7 2010-08-28 16:55:26

+0

使用System.CodeDom – 2010-08-28 16:55:59

回答

4

看看CSharpCodeProvider,它基本上可以使用一個包含源代碼的字符串並將其編譯爲程序集(EXE或DLL),或者如果需要的話,可以使用內存程序集。

您還可以使用codeDOM作爲代碼生成的一面。以'Generating Source Code and Compiling a Program from a CodeDOM Graph'爲起點。

+0

「內存」組件。迷人。我什麼時候可以用一個?聽起來像這可能是一個很好的合適 – LamonteCristo 2010-08-28 16:58:29

+0

@ MakerOfThings7,在內存程序集很好,當你想支持的東西,如動態生成代碼基於用戶輸入,並沒有二進制文件保存到磁盤執行按需,支持像宏等東西當然,.NET已經發展了這一點,你也可以使用動態方法等。這裏是動態方法的鏈接http://msdn.microsoft.com/en-us/library/exczf7b9.aspx – 2010-08-28 17:03:30

3

最簡單的事情就是調用csc這個C#編譯器。

例如:(從MSDN頁上面鏈接)

csc /out:My.exe File.cs 

將產生一個可執行從稱爲File.cs輸入文件稱爲My.exe

如果要編譯的可執行文件相當複雜,那麼保留預編譯並只編譯一個在運行時調用方法來獲取私鑰的DLL可能會更簡單,因爲這樣會更簡單命令行傳遞給csc。

+0

csc是否總是安裝.NET?客戶端框架(.NET的更輕版本)如何? – LamonteCristo 2010-08-28 16:56:25

+0

@MakerOfThings,根據http://msdn.microsoft.com/en-us/library/cc656912.aspx,msbuild是* not * included,但它沒有說csc/vbc。我假設他們是核心組件,但我沒有一個無框架的個人電腦來證實我害怕。 – Rob 2010-08-28 16:59:20

+1

是的,scs.exe和vbc.exe包含在運行時,而不是SDK中。所以他們在每臺目標機器上。 – 2010-08-28 18:04:07