.NET Core 1.1允许访问间接依赖类型

时间:2017-04-20 10:15:25

标签: visual-studio .net-core visual-studio-2017 .net-core-1.1

我创建了一个新的.NET Core 1.1解决方案,并注意到一个奇怪的行为:如果我在解决方案中创建多个项目并链引用它们,我就能够自由地访问位于依赖项依赖项中的类型,任何级别下来。

这是一个例子:

enter image description here

我们有 Sandbox 解决方案, Baz 类库项目, Bar 类库项目引用 Baz 以及 Foo 控制台应用程序项目引用 Bar

Foo 项目中,我能够访问和使用 BazThing Baz 项目中定义的类型,即使 Foo 没有 Baz 的参考。

这也适用于NuGet包:如果我通过NuGet将实体框架添加到 Baz 我可以在 Foo中使用 DbContext 类型 project。

当项目用于实现图层隔离时,这是一个很大的问题。

现在允许开发人员访问和使用依赖关系的实现细节或绕过层分离,“恶意”和错误(在上面提到的示例中,IntelliSense很乐意建议使用 BazThings 时在没有任何警告的情况下输入 ba

这是事情从现在开始如何运作,还是我们错过了什么?

是否有可能以某种方式阻止/抑制这种行为?

我在哪里可以找到有关此行为的文档?

1 个答案:

答案 0 :(得分:2)

这是现代NuGet / msbuild的预期行为。它被称为meta-packages / transitive dependencies,例如用于NETStandard.Library包以包含基类库的所有库。我认为没有办法隐藏它们。期望在VS的下一版本中将此功能添加到完整的.NET Framework项目中。

除了你的问题之外,我个人的观点是隐藏参考树后面的文物可能在第一时间看起来很有用,但不会带来任何架构上的好处。可以调用加载的程序集。一种方式或另一种方式。分层,层桥接和对架构的遵守只能被教导/学习/审查/记录。教导开发者,但不要在他们周围建造围墙。纪律不应该由工件强制执行,而应由开发人员自己强制执行。

相关问题