2017-10-07 157 views
2

.NET Core中的* deps.json文件的用途是什麼? 將引用存儲在此文件中而不是彙編清單(如獨立.NET Framework中)的原因是什麼?.NET Core中的* deps.json文件

使用Ildasm我檢查到程序集清單不包含dotnet構建命令後這些依賴項的條目。

但是它有dotnet發佈命令後的條目。

+0

是的,你不想看起來太接近,可怕的東西,希望它不會持續太久。這曾經住在project.json中,但還沒有真正走過。這是他們解決.NETCore v1的方式的一個副作用,他們分解了很多很多很小的框架程序集。理論上說,將它們移植到MacOS以及許多Linux版本並在其上進行更改時會更容易。計劃是要回到大的計劃,不知道什麼時候它會被執行。 –

回答

6

.deps.json文件包含有關構建程序集引用的程序集的元數據,以及搜索它們的位置以及有關使用的編譯選項的信息。

該信息由加載和配置運行時的本地組件(corehost)讀取。當需要加載引用程序集時,主機將使用此文件中的信息(以及任何runtimeconfig.json/runtimeconfig.dev.json)來找到要加載的正確程序集。

此信息也用於其他地方。例如,ASP.NET Core的Razor視圖編譯也使用它來將正確的引用和配置傳遞給生成的代碼。而單元測試主機也需要在單元測試庫加載到測試主機時使用這個文件中的信息。用於讀取和寫入該文件的託管API可在Microsoft.Extensions.DependencyModel NuGet包中找到。

+0

我讀過關於corehost的文章,而且據我所知,它完全忽略了程序集清單。 程序集加載= .deps文件中的目錄+程序集中的程序集 我正確嗎? –

+0

同樣在我的Mac中,所有基礎庫都從/ usr/local/share/dotnet/shared加載 此路徑不在任何地方描述。 –

+0

是的,只要CoreCLR需要一個由它必須使用的IL引用的程序集,就可以解析程序集。完整的CLR也是如此。清單部分對於非.NET /「本機」DLL更爲重要,因爲與IL相比,本機代碼不包含程序集引用,因此元數據需要告訴鏈接程序啓動時加載哪些文件,以便所有使用的符號都是解決。 –