您好,登錄后才能下訂單哦!
.NET組件中RuntimeVersion的作用是什么,很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
使用過COM來訪問.NET組件的朋友們應該都會注意到在對應注冊表中有一個RuntimeVersion的鍵值:
這個RuntimeVersion的命名很容易讓人誤認為RuntimeVersion是用來指定該.NET組件所應該運行的CLR的版本號。實際上,這個鍵值的意思和字面上不是特別一致。如果我們考慮一個情況:首先,進程中先創建一個.NET類型的實例,RuntimeVersion標記為1.1,然后再創建一個.NET類型的實例,其RuntimeVersion標記為v2.0,那么到底會加載那些CLR版本呢?其實,在目前的.NET版本(Silverlight除外)中,因為無法支持在同一個進程中加載多個不同版本的CLR,因此無法支持真正的按照RuntimeVersion來加載不同的CLR版本。實際上,CLR總是加載***的CLR版本(嚴格來說其實是mscoree.dll來加載)。因此,在之前的情況下,如果機器上面安裝了1.1和2.0,實際上進程只加載了2.0的CLR,而沒有加載1.1。如果機器上面只有1.1的話,***個1.1的.NET組件會創建成功,并且啟動1.1的CLR,第二個2.0的.NET類型會創建失敗,并且返回REGDB_E_CLASSNOTREG (0x80040154)
總結一下:通過COM的CoCreateInstance創建.NET類型的實例的時候,CLR總是加載***的CLR版本,如果啟動成功,檢查該CLR版本是否大于或等于RuntimeVersion鍵值。如果是,成功,返回S_OK,否則失敗,返回REGDB_E_CLASSNOTREG。因此,如果在CoCreateInstance的時候發現返回REGDB_E_CLASSNOTREG,但是注冊表又沒有問題的話,不妨檢查一下RuntimeVersion。
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。