2014-10-09 60 views
0

我有一個運行在MS實現和Mono下的.net應用程序。它需要.net 4.5,也不能在老版本的Mono上運行(例如它在3.8.0下破解,而3.10.0罰款)。如何從內部檢查.net/mono版本.net

我認爲檢查應用程序是否可以運行的一種好方法是編寫一小段可以鏈接到.net 2.0庫的代碼,並在那裏執行檢查。這樣就很容易確定Mono版本,並且我可以在主應用程序中重複使用相同的代碼作爲安全檢查(儘管它可能不會執行該代碼 - 例如應用程序只是在沒有任何說明的情況下存在。淨4.0)。

我遇到的問題是找到.net的最高版本,它支持在任何運行時用於執行測試代碼,而不是與其鏈接的任何版本(這似乎是什麼System.Environment。版本返回)。我可以通過使用反射來執行Mono.Runtime.GetDisplayName來獲取單聲道版本。也許有一些(類似的)解決方案可以在Windows .net下運行?

回答

1

在Windows中,確定安裝的.NET框架版本的最可靠的方法是使用註冊表。你需要檢查的子項是:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\NET Framework Setup\NDP\ 

看看這個鏈接的代碼示例來讀取這些值正確地在C#:

http://msdn.microsoft.com/en-us/library/hh925568%28v=vs.110%29.aspx

單聲道的最可靠的方法來確定版本可能是通過運行shell命令:

mono --version 

我想你可以運行與Process類,並解析出放。

+0

非常感謝MS文檔的鏈接。 (調用單聲道並不容易,因爲它需要知道可執行文件的來源,但我提到的基於反射的方法適用於我。) – 2014-10-09 14:04:27

+0

這樣回答您的問題,還是需要其他建議? – 2014-10-09 17:22:52

+0

這正是我需要的,非常感謝。 – 2014-10-09 17:25:44