2017-02-24 106 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