.NET Core 项目参考继承

7
我发现当使用.NET Core 2.2时,如果您将一个项目引用添加到另一个项目中,那么这些项目的引用将对引用原始项目的其他项目可用。
例如:
如果您有三个项目,比如UI、Services和DAL。如果您从UI引用了Services,并且Services引用了DAL。通过这种设置,您将注意到您可以添加using语句并从IU项目访问DAL项目中的类。这背后的原因是什么,是否可以禁用它?
UI -- 项目引用 ---- Services
Services -- 项目引用 ---- DAL

通过上面的简单示例,我不想让我的 UI 访问我的 DAL(实体模型)。 - mluker
1
你或许可以使用PrivateAssets来实现这个功能。 - Kirk Larkin
2个回答

7
我采纳了@Kirk Larkin的评论并使它对我有用,但我必须使用“ExcludeAssets”:

想象一下像这样的东西:

-- GUI

---- 业务层 dll

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

Inside the Business layer dll project file (csproj):

<ProjectReference Include="..\..\DALProject\DALProject\DALProject.csproj">
  <ExcludeAssets>compile</ExcludeAssets>
</ProjectReference>

有了这个,我就不能再从GUI层直接引用DALProject方法了。该方法还包括所有支持的DLL文件以供运行时使用。

希望这可以帮到您。


ExcludeAssets信息来自:https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files?WT.mc_id=-blog-scottha#controlling-dependency-assets - Michael Woolsey

-5

这不仅适用于.NET Core,.NET Framework,.NET Standard等也是如此。这是几乎所有编程语言的工作方式。如果A依赖于B,而B又依赖于C,则A 依赖于C。没有其他方法。必须满足所有库,从上到下才能使整个应用程序正常运行。对于.NET语言来说,这可能更加明显,因为所有依赖项都是单独的DLL,并且每个依赖项都会随之而来。


2
我理解依赖链,这很有道理。但是,如果您在.NET Framework项目中创建了我提到的项目结构,则无法通过using语句访问链接的引用。这更像是一个为什么Visual Studio允许我这样做而以前不允许的问题。 - mluker
如果你从分层架构的角度来看待这个问题,那么它是用于组织代码并将相似的内容放在一起。这与隔离依赖项无关。这不是它的工作方式。如果你想真正抽象化你的数据访问层(DAL),那么你需要一个单独的项目,将你的服务层转换成一个实际的 HTTP 服务或其他什么东西。然后,你的用户界面(UI)就真正不依赖于DAL了。除此之外,就只能这样了。 - Chris Pratt
2
如果您使用 .NET Framework 创建控制台应用程序并添加两个新项目,分别为 .NET Framework 类库,并按照描述设置项目引用,则我只能访问来自直接引用的项目的类。但如果使用 .NET Core,您会发现其工作方式不同(就像您所解释的,而我则在质疑)。 - mluker
2
在使用 PackageReference 和传统的 packages.config 方法时,就需要注意一个问题,那就是对于你要直接使用的某个包,需要通过 NuGet 级别引用。我正在尝试寻找相关文档,但我相信 OP 所说的是正确的情况。 - Kirk Larkin
2
我可以确认原帖作者所说的内容。我有一个 .net framework 4.8 应用程序,其中包含一个 WPF 项目、业务层项目和数据存储项目。在这个项目中,WPF 项目无法直接与同一解决方案中的数据存储项目通信,而且一直都是这样。我正在使用 .net core 3.0 项目,在业务层中添加引用后,上面的 GUI 层可以看到并使用该引用,即使 GUI 自身没有引用它。不知道这是否只是 .net core 的“特性”。 - Michael Woolsey
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接