如何在運行時無需Loader驗證程序集簽名或者甚至使用GAC'ed程序集來確定是否正在使用本機圖像?確定是否正在使用GAC'ed和NGen'ed程序集
我有一個複雜的系統,我們正在試驗NGen,但是現在我們正在從所有DLL所在的文件夾運行exe文件,這是因爲很多後期綁定依賴關係,看着Process Explorer,它看起來像本機圖像正在使用,但我怎麼能確定我獲得了全部的好處並消除了加載程序驗證步驟?
乾杯, 格雷姆。
更新: 我得到很多這種從集綁定日誌查看器的事情:
LOG: [Level 1]Start validating IL dependency MyCompany.Entities, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7cd8595f4671c5dd.
LOG: Dependency evaluation succeeded.
,並在年底
LOG: Validation of dependencies succeeded.
LOG: Start loading all the dependencies into load context.
LOG: Loading of dependencies succeeded.
LOG: Bind to native image succeeded.
Native image has correct version information.
Attempting to use native image C:\Windows\assembly\NativeImages_v2.0.50727_32\MyCompany.Mylibrary#\4710bb8309419d707681bd360088181f\MyCompany.MyLibrary.MyClass.ni.dll.
ZAP: Native image has been relocated.
Native image successfully used.
因此它使用本地圖片但仍然驗證它們,即不使用GAC版本,即使這是我創建原始圖像的地方,像這樣:
ngen install "MyCompany.Entites, Version=2.0.0.0, Culture=neutral, PublicKeyToken=7cd8595f4671c5dd, processorArchitecture=MSIL"
腳註: 這篇文章似乎暗示,如果組件不是從GAC加載,那麼驗證過程將抵消NGen的優勢? CLR Inside Out - Improving Application Startup Performance (MSDN)
更新 - 正如Nobugz在下面評論指出,上述驗證步驟是不是因爲3.5 SP1見執行:MSDN Docs on NGen
+1這看起來很有前途,但我認爲這證明我的本地圖像不是從GAC使用,所以他們仍然正在驗證的加載,有效地抵消了ngen的優勢,請參閱我原來編輯的Q. –
@dog - 看起來很清楚,程序集並未從GAC加載,但它確實使用Ngen-ed圖像。這個是正常的。不確定可能存在什麼其他問題,如果這是您擔心的問題,強烈的名稱驗證將被完全信任地忽略。 –
我已經添加了一個腳註,它是我試圖消除的那篇文章中提到的加載器驗證。 –