2015-07-19 74 views
4

在project.json文件中我們有一個依賴項部分,然後我們也有一個框架部分,在每個框架下可以有更多的依賴關係。 我很困惑爲什麼有時候依賴關係需要放在框架部分和主依賴部分的其他時間?困惑於project.json中的依賴項

例如,在我的幾個項目中,我在dnxcore50下有依賴關係,但是當我從nuget升級它時,它將升級版本放在主依賴項部分,並在框架部分留下較低版本的舊版本。

一般來說,我發現在VS 2015中爲一個或另一個框架犯錯和獲得奇怪的依賴關係解析錯誤非常容易,並且很難找出造成錯誤的原因。我曾多次在一個項目中添加依賴項,導致在另一個項目中出現錯誤,這些錯誤類型在鏈中的多個包中找到,或解決基本基本類型的問題。

看起來像VS 2015模板可能會把它們放在不同的地方,當你添加一個引用nuget,或者也許因爲我使用beta5 VS中的工具有點不同步。

是否有任何關於何時將依賴關係放在主依賴關係部分vs框架特定部分的指導?

回答

8

您可以執行特定於框架的依賴性的原因是某些軟件包不支持所有框架。

最常見的情況是NuGet軟件包不支持CoreCLR(還)。有些人更喜歡在該框架上使用替代品,而不是不支持它。因此,在桌面CLR(dnx451)上,他們使用一個NuGet包,而在CoreCLR上使用另一個。

一個具體的例子是dnu。在桌面CLR上運行時,它使用System.Net.Http。然而,在CoreCLR它使用Microsoft.Net.Http.Clienthttps://github.com/aspnet/dnx/blob/dev/src/Microsoft.Framework.PackageManager/project.json#L29

您可能還高於我們使用dependenciesframeworkAssemblies文件中注意到。這是你使用不同目標的不同軟件包的另一個原因。 frameworkAssemblies來自GAC,它只適用於桌面CLR。

因此,規則是:當您擁有將被您打包的所有框架支持的軟件包時,使用頂級依賴項屬性。

+0

這可以幫助我一些,但它仍然不清楚如何決定在哪裏放置一些依賴關係。當我在VS中創建類庫項目時,將「System.Collections」:「4.0.10-beta-22816」,「System.Linq」:「4.0.0-beta-22816」,「System.Threading」 :dnxcore50依賴項下的「4.0.10-beta-22816」,「Microsoft.CSharp」:「4.0.0-beta-22816」。從beta4升級到beta5並刪除dnx451框架後,我遇到了錯誤。然後,我升級一些nugets,並在主要依賴項中放入「System.Collections」:「4.0.10-beta-23019」,並將所有這些包中的舊版本保留在dnxcore50等之下 –

+0

對於第三方軟件包,我似乎很清楚,但對於System和Microsoft命名空間中的東西,根據你的解釋我試圖解決這些錯誤,但是在進行更多的實驗後,他們應該去 –

+0

。看來只有在dnxcore50下才會添加System.stuff的包,然後如果發生dnx451錯誤,則必須在dnx451下添加相應的框架程序集。 –