2017-02-24 108 views
8

在發展中.NET 1.1的核心樣本Web應用程序和Visual Studio 2017年RC,我實現了以下內容:傳遞引用1.1

enter image description here

正如你可以看到:

  • ClassLibrary3具有ClassLibrary2參考,
  • 和ClassLibrary2具有ClassLibrary1的
基準0

我在ClassLibrary3項目的Class3類中編寫了一個簡單的方法,Intellisense允許我使用Class1只寫類的名稱,我的意思是,不需要顯式引用ClassLibrary1項目。

我在這裏錯過了一些觀點嗎?我不希望有人簡單來忽略ClassLibrary2。

謝謝。

+0

ClassLibrary1包含在ClassLibrary3中,因爲它是ClassLibrary2所需要的,所以Class1當然可用。正如它所說的,你只需要添加'使用ClassLibrary'即可。你可能需要澄清你的目標是什麼 - 你想達到什麼目標? – Mitch

+2

嗯,我不記得早期版本的Visual Studio/.NET是否可以像這樣工作。我認爲強制直接引用一個能夠使用其元素的項目,而不僅僅是傳遞參考。 – Franco

+0

我發現了這個問題的可能解決方案:https://ardalis.com/avoid-referencing-infrastructure-in-visual-studio-solutions – Franco

回答

8

傳遞項目到項目的引用是Visual Studio 2017和Microsoft.NET.Sdk的新功能。這是故意的行爲。

請參閱https://github.com/dotnet/sdk/issues/200

+0

不錯。我想現在可以更清楚地看到UI層在傳統3層體系結構中對數據層的依賴性。 – Franco

3

如果您對禁用傳遞引用行爲感興趣,我終於找到了一種方法。

如果你想項目A引用B和B引用C,但不希望引用C,你可以到B的ProjectReference添加PrivateAssets="All"至C,像這樣:

在B.csproj

<ItemGroup> 
    <ProjectReference Include="..\C\C.csproj" PrivateAssets="All" /> 
</ItemGroup> 

此設置使C'S參考私人所以它只存在內B.現在預測,參考B將不再還引用了C.

來源:https://github.com/dotnet/project-system/issues/2313