簡體   English   中英

.NET Core 1.1允許訪問間接依賴關系類型

[英].NET Core 1.1 allowing access to indirect dependencies types

我創建了一個新的.NET Core 1.1解決方案,並注意到一個奇怪的行為:如果我在該解決方案中創建多個項目並對其進行鏈式引用,則可以自由訪問位於某個依賴項依賴項中的類型,無論其級別如何。

這是一個例子:

在此處輸入圖片說明

我們有一個沙箱解決方案,一個Baz類庫項目,一個引用BazBar類庫項目和一個引用BarFoo控制台應用程序項目。

Foo項目中,我可以訪問和使用BazThing (在Baz項目中定義的一種類型),即使FooBaz上沒有引用。

這也適用於NuGet包:如果我通過NuGet將實體框架添加到Baz ,則可以在Foo項目中使用DbContext類型。

當項目用於實現層隔離時,這是一個巨大的問題。

現在,允許開發人員“惡意”和錯誤地訪問和使用依賴項或旁路層隔離的實現詳細信息(在上述示例中,IntelliSense會在輸入ba而沒有任何警告的情況下愉快地建議使用BazThings )。

從現在開始這是工作方式嗎,還是我們缺少了什么?

是否有可能以某種方式預防/抑制這種行為?

在哪里可以找到有關此行為的文檔?

這是現代NuGet / msbuild的預期行為。 它被稱為元包 / 傳遞依賴項 ,例如用於NETStandard.Library包,以包括基類庫的所有庫。 我認為沒有辦法隱藏它們。 希望此功能可以在VS的下一版本中添加到完整的.NET Framework項目中。

除了您的問題外,我個人的觀點是,將人造物隱藏在參考樹后面可能乍一看很有用,但不會帶來任何架構上的好處。 可以調用已加載的程序集。 一種或另一種方式。 分層,層橋接和對體系結構的依從性只能被教導/學習/審查/記錄。 教開發者,但不要在他們周圍築牆。 紀律不應由工件強制執行,而應由開發人員自己強制執行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM