Dot-Net
確定是否正在使用 GAC 和 NGen 的程序集
我如何確定是否正在使用本機圖像,而載入程序沒有在執行時驗證程序集的簽名,甚至使用 GAC 的程序集?
我有一個複雜的系統,我們正在用 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 由內而外 - 提高應用程序啟動性能 (MSDN)
更新- 正如 Nobugz 在下面的評論中指出的那樣,自 3.5 SP1 以來未執行上述驗證步驟,請參閱:MSDN Docs on NGen
您可以從 Fuslogvw.exe 工具中輕鬆查看。從 Visual Studio 命令提示符啟動它。使用 Log Categories = Native Images, Settings + Log all 綁定到磁碟進行配置。執行你的程序。回到 fuslogvw,刷新。它將向您顯示已載入的所有程序集的列表。
點兩下一個條目以查看程序集是如何載入的。如果它來自 GAC,您將看到:
LOG:從 C:\Windows\assembly\GAC_MSIL\blahblah 載入的 IL 程序集
如果使用了 Ngen-ed 圖像,您將看到:
LOG:綁定到本機映像成功。