2012-02-08 68 views
5

我有一個.il文件,我可以編譯沒有任何問題。我可以強烈地命名它,所以沒有任何問題。但我無法像我期望的那樣通過屬性設置文件版本。如何在使用ilasm時爲組件設置FileVersion?ILASM不設置FileVersion

如果我做了一個往返,我總是得到一個.res文件,它只包含不可讀的二進制數據。這個res文件裏面有什麼,我可以編輯它嗎?

代碼不起作用

.assembly myAssembly 
{ 
    .custom instance void [mscorlib]System.Reflection.AssemblyFileVersionAttribute::.ctor(string) = { string('1.2.3.4') } 

回答

9

問題可以通過使用res文件來解決。用ildasm和ilasm進行往返旅行是不夠的。 IL文件不引用.res文件。我必須手動將它添加到ilasm呼叫。 res文件中的數據似乎包含寫入PE標頭的信息,這對我來說確實很好。

所需的最終命令行是

ilasm test.il /dll /res:test.res 

我還是不知道究竟是什麼RES文件中,但我可以用我手動,然後編譯創建任何其他assemlby的元數據信息exhange它它根據需要替換原始組件的元數據。

似乎沒有多少人在做這樣的事情。

+1

每個C/C++程序員都這樣做。創建.res文件的最簡單方法是使用虛擬C++項目。您可以手動編輯.rc文件,也可以使用C++ IDE中的資源編輯器。 rc.exe SDK工具將其轉換爲.res – 2012-02-08 14:10:37

+0

謝謝我沒有想到VS實際上可以編輯二進制編輯器中的版本資源。很高興知道ilasm不使用一些神祕的二進制格式。 – 2012-02-08 20:40:21