簡短版本: 我希望我的程序能夠(只讀)在運行時訪問其自己的源代碼。有沒有辦法在編譯期間自動將源代碼打包到dll中?如何在dll中包含源代碼?
龍版本:
的背景是,在發生異常時,我想自動創建一個包含發生了什麼的詳細信息的文件。除其他外,該文件應包括導致問題的函數的源代碼。我想通過電子郵件將此文件發送給其他人,並且接收人很可能沒有(或不想安裝)Visual Studio,因此使用符號服務器和類似服務的任何內容都是沒有問題的。它需要是一個純文本文件。
理想情況下,我會在某處找到相關的源代碼文件,只是複製出相關的行。你可以放心地假設,只要我有一個包含整個源代碼的文件夾,我就可以找到我想要的文件和行。
到目前爲止,我可以想出最好的想法 - 我沒有詳細研究它,因爲它似乎無處不在 - 是修改MSBuild文件以創建一個.zip源代碼編譯,並要求.dll和.zip駐留在同一個文件夾中。
大多數的計算器上的發音相似的問題,我發現似乎對付反編譯 .dll文件,這是不我想做的事情。我的有的源代碼,我想用便捷的方式將它與.dll一起發貨。
更新:很長的版本
似乎有些人嚴重質疑爲什麼我想這樣做,所以這裏的答案:我的軟件的主要目的是測試一些其他軟件。其他軟件有一個GUI。對於一個簡單的例子,假設其它軟件是標準的Windows計算器,然後我的測試用例可能是這個樣子:
calculator.Open();
calculator.EnterValue(13);
calculator.PressButtonPlus();
calculator.EnterValue(38);
calculator.PressButtonEnter();
int value = calculator.GetDisplayedValue();
Assert.That(value == 51);
calculator.Close();
這些測試是故意寫的非常可讀的方式。
當發生問題時,我想要做的是給計算器的開發人員詳細說明如何以手工方式重現問題,,而不需要我的軟件。 (在這個例子中,他會打開計算器,輸入13,然後按加號,等等。)
也許另一個選擇是讓每個函數calculator.Something()
寫出一條信息行到一個日誌,但那會a)做更多的工作,b)只包括測試跑到它中止的地步,以及c)承擔一些函數中忘記寫行的風險,從而給出了所做的不正確表示。但我願意接受其他解決方案,而不是複製源代碼。
一些調試符號文件(.pdb)有問題嗎? – Oded
哇............. – Tigran
@Oded:他的目標客戶端沒有,也不想擁有VS或其他工具。 (出於某種原因) – Tigran