2017-08-10 70 views
3

我試圖找出程序集已更改(即使版本號相同)。如何獲得C#.NET編譯器程序集GUID

現在最好的努力是發現它已被重新編譯,因此想使用與MSBuild使用的相同的項目,我相信它是存儲在元數據中的文件GUID? (按照The .NET File Format

有沒有什麼辦法可以訪問這個信息,而不需要重新發明輪子,並下降到文件字節?

+1

有用的https://stackoverflow.com/questions/502303/how-do-i-programmatically-get-the-guid-of-an-application-in-net2-0? – DavidG

+0

嗯,不,[Guid]沒用。 MVID可能很有用,編譯器在創建程序集時必須生成一個新的。這一切都沒有告訴你,程序集實際上已經改變,只是文件被重新創建。文件日期已經告訴你的東西。 –

+0

@文件日期的@HansPassant問題是,如果你使用一個不保存修改日期的啞文件,那麼你就失去了這個事實,而不是世界上最大的問題,但如果我不能使用同樣的事情MSBuild使用。 –

回答

0

嘗試存儲程序集的變量最後修改日期並檢查它。 這裏是如何得到一個組裝的最後修改日期:

System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly(); 
System.IO.FileInfo fileInfo = new System.IO.FileInfo(assembly.Location); 
DateTime lastModified = fileInfo.LastWriteTime; 
+0

我可能不得不回到上次修改日期。 –

1

嗯,看來組件沒有關聯的GUID。 模塊,類,方法,字段都有GUID,程序集中的「GUID」流是存儲它們的地方。

如果您想訪問程序集的元信息(例如,其主模塊的GUID),Mono.Cecil可能是一個不錯的選擇。

但相反,您可以通過使用哈希函數來計算校驗和或者只是查看修改日期來實現該目的。 System.IO.FilesystemWatcher能夠通知你,如果你不想間接訪問文件。

+0

哇謝謝! Mono.Cecil看起來有趣,會檢查出來。 –

相關問題