亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么這些 Type 對象不相等?

為什么這些 Type 對象不相等?

C#
慕容708150 2021-11-14 15:02:51
我有一個應用程序,我通過讀取插件的 DLL 文件然后使用AppDomain.CurrentDomain.Load(bytes). 請注意,應用程序和插件加載在同一個 AppDomain 中。該插件包含幾個類,它們使用靜態構造函數在服務定位器系統中注冊自己。后來,我的主應用程序嘗試使用服務定位器查找并實例化這些服務類之一,但找不到該類。通過手動檢查,我可以看到定位器中存在注冊表項,因此它已注冊,但由于某種未知原因,類型不相等。然后我在類型注冊的地方放了一個斷點,發現了以下奇怪的地方:怎么可能typeof(IViewFor<CompactDashboardViewModel>)不等于自己?然后我又測試了一些東西:t == ttruetypeof(IViewFor<CompactDashboardViewModel>) == typeof(IViewFor<CompactDashboardViewModel>)truet.AssemblyQualifiedName == typeof(IViewFor<CompactDashboardViewModel>).AssemblyQualifiedNametrue實際上,這兩個 Type 對象的所有內容似乎都是相等的,除了m_handle和m_cache字段。typeof(IViewFor<CompactDashboardViewModel>).TypeHandle{System.RuntimeTypeHandle}    Value: 0x08690784    m_type: {Name = "IViewFor`1" FullName = "ReactiveUI.IViewFor`1[[PluginMTSICS.ViewModel.CompactDashboardViewModel, PluginMTSICS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}t.TypeHandle{System.RuntimeTypeHandle}    Value: 0x0f8cf5a8    m_type: {Name = "IViewFor`1" FullName = "ReactiveUI.IViewFor`1[[PluginMTSICS.ViewModel.CompactDashboardViewModel, PluginMTSICS, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]"}有人知道這里發生了什么嗎?我正在使用 .NET 4.7.1。我正在嘗試創建一個 MCVE,但到目前為止沒有成功。
查看完整描述

2 回答

?
湖上湖

TA貢獻2003條經驗 獲得超2個贊

也許這有效:


Type t = typeof(IViewFor<CompactDashboardViewModel>);

//this should evaluate to true:

bool result = t.Equals(typeof(IViewFor<CompactDashboardViewModel>));

Type.Equals 文檔:https ://msdn.microsoft.com/en-us/library/3ahwab82( v= vs.110).aspx


編輯:


閱讀這篇文章類型檢查后:typeof、GetType 還是?我希望這能奏效:


Type t = typeof(IViewFor<CompactDashboardViewModel>);

//this should evaluate to true:

bool result = t is IViewFor<CompactDashboardViewModel>;


查看完整回答
反對 回復 2021-11-14
?
瀟瀟雨雨

TA貢獻1833條經驗 獲得超4個贊

好的,所以我解決了這個問題。這是我所做的:

  1. 我的主應用程序引用了一個庫項目,而該項目又引用了插件項目。這可能導致程序集在不同的加載上下文中加載兩次(有關更多信息,請參見下面的鏈接)。我刪除了參考。問題沒有解決,現在發生了奇怪的事情,例如typeof(CompactDashboardViewModel) == null.

  2. 我的插件加載代碼最初使用appdomain.Load(bytes). 我用Assembly.LoadFromtypeof()現在工作正常,并按預期工作。但是,Type.GetType()有時仍會返回 null。

  3. 我換成Assembly.LoadFromAssembly.Load,并使用添加我的插件目錄探測路徑<probing>的標簽app.config?,F在一切正常,但是我無法通過文件路徑加載插件,因為Assembly.Load需要程序集名稱。不理想,但我可以忍受。


查看完整回答
反對 回復 2021-11-14
  • 2 回答
  • 0 關注
  • 238 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號