.Net Core 项目参考继承

mlu*_*ker 5 asp.net-core-2.1

我注意到在使用 .net core 2.2 时,如果您将项目引用添加到另一个项目,这些项目引用可用于引用原始项目的其他项目。

例如:

如果您有 3 个项目,比如说 UI、服务和 DAL。如果您从 UI 引用了服务,而服务引用了 DAL。通过该设置,您会注意到您将能够添加 using 语句并从 IU 项目访问 DAL 项目中的类。这背后的原因是什么,可以禁用吗?

UI——
项目参考
——服务

服务
——项目参考
——DAL

Mic*_*sey 7

我接受了@Kirk Larkin 评论并使其对我有用,但是我必须使用“ExcludeAssets”来代替:

想象一下这样的事情:

-- 图形用户界面

---- 业务层dll

------ 数据访问层dll

Inside the Business layer dll project file (csproj):

<ProjectReference Include="..\..\DALProject\DALProject\DALProject.csproj">
  <ExcludeAssets>compile</ExcludeAssets>
</ProjectReference>
Run Code Online (Sandbox Code Playgroud)

这样,我就无法再从未直接引用的 GUI 层引用 DALProject 方法。此方法还包括供运行时使用的所有支持 DLL。

希望这可以帮助。


Chr*_*att -6

这并不是 .NET Core 独有的。它与 .NET Framework、.NET Standard 等的工作方式相同。这几乎是所有编程语言的工作方式。如果 A 依赖于 B,B 依赖于 C,那么 A依赖于 C。这是没有办法解决的。必须从上到下满足所有库的要求,整个应用程序才能正常运行。在 .NET 语言中发生这种情况可能更为明显,因为所有依赖项都是单独的 DLL,并且每个依赖项都随缘而生。

  • 我理解依赖链,这是有道理的。但是,如果您创建我在 .NET Framework 项目中引用的项目结构,您将无法通过 using 语句访问链接引用。这更多的是为什么视觉工作室允许我这样做,而之前的问题却不允许我这样做。 (2认同)
  • 如果您使用 .net 框架创建控制台应用程序并添加两个新项目(都是 .net 框架类库),并按所述设置项目引用,我只能访问我直接引用的项目中的类。尝试使用.net core,你会发现它的工作方式有所不同(就像你在解释而我在质疑)。 (2认同)
  • 使用“PackageReference”和传统的“packages.config”方法之间存在差异,因为需要对要直接使用的包进行 NuGet 级别的引用。我正在尝试找到有关它的文档,但我相信OP所说的在这种情况下是正确的。 (2认同)
  • 我可以确认原始海报所说的内容。我有一个 .net Framework 4.8 应用程序,其中包含 WPF 项目、业务层项目和数据存储项目。WPF 项目无法在同一个解决方案中直接与该项目中的数据存储项目进行通信,而且一直如此。我正在处理一个 .net core 3.0 项目,在该项目中,我在业务层中添加了一个引用,并且其上方的 GUI 层可以看到并使用该引用,即使 GUI 本身没有对其本身的引用。不知道这是否只是 .net core 的“功能”。 (2认同)