为什么可以在 .NET Core 中从 sub-reference 导入命名空间?

Why is possible to import namespace from sub-reference in .NET Core?

我在解决方案中有 3 个项目。

-TestProject 引用了 Child 项目

-Child 项目引用了 childOfchild 项目

我预计无法从 TestProject 中的 childOfchild 项目创建 class 的实例。这对我来说没有意义。如果我愿意,我会将 childOfchild 项目导入 TestProject,但我不希望这样。 这正是我想要避免的,我想要清楚地分开图层。

我很确定这不是以前这样工作的。 如果有人向我解释为什么会这样,我将不胜感激。

此行为由 .NET Core/.NET 的新项目系统提供 Standard/SDK-based csproj(取一个名字,它们都是相同的)。新行为是 PackageReferences 和 ProjectReferences 现在默认是可传递的,这意味着当您引用一个项目时,您将自动继承它的 PackageReferences 或 ProjectReferences。

您可以通过在该引用上设置 PrivateAssets 属性 来控制包含该引用的项目。在您的示例中:在 Child.csproj 中,您可以这样做:

<ItemGroup>
  <ProjectReference Include="..\ChildOfChild\ChildOfChild.csproj" PrivateAssets="all" />
</ItemGroup>

这告诉项目系统"I want to reference ChildOfChild, but I don't want that implementation detail exposed to projects which reference me."

有关详细信息,请参阅此 blog post