Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/three.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net core mvc Net核心允许链接项目引用_Asp.net Core Mvc - Fatal编程技术网

Asp.net core mvc Net核心允许链接项目引用

Asp.net core mvc Net核心允许链接项目引用,asp.net-core-mvc,Asp.net Core Mvc,在ASP.Net Core之前: 我在一个解决方案中创建了一个MVC站点和两个类库。假设项目名称为MVC、Lib1和Lib2 我添加了如下引用:MVC引用Lib1,Lib1引用Lib2 使用这种引用结构,MVC无法访问Lib2项目中的类,这是我所期望的 ASP.Net核心中的相同项目和引用结构:MVCcan访问Lib2中的类。在VisualStudio的解决方案资源管理器中查看MVC/References节点,您可以看到MVC/References/DNX 4.5.1/Lib1—到目前为止还

在ASP.Net Core之前:

  • 我在一个解决方案中创建了一个MVC站点和两个类库。假设项目名称为MVC、Lib1和Lib2
  • 我添加了如下引用:MVC引用Lib1,Lib1引用Lib2
使用这种引用结构,MVC无法访问Lib2项目中的类,这是我所期望的

ASP.Net核心中的相同项目和引用结构:MVCcan访问Lib2中的类。在VisualStudio的解决方案资源管理器中查看MVC/References节点,您可以看到MVC/References/DNX 4.5.1/Lib1—到目前为止还不错(我确实从MVC添加了对Lib1的引用)—但随后我可以扩展Lib1节点,并在其下看到Lib2。最终结果:MVC可以通过引用链访问Lib2类

我认为这种行为是有意为之,但我如何才能实现旧的行为呢?我不希望开发人员能够从MVC访问Lib2类。

是的,这现在是.NETCore中的一项功能。从这本书中多读一些。 但是您可以使用ProjectReference上的PrivateAssets属性对MVC csproj隐藏Lib2:

在Lib1.csproj中:

<ItemGroup>
    <ProjectReference Include="..\Lib2.csproj" PrivateAssets="All" />
</ItemGroup>


这样,当MVC.csproj引用Lib1时,它将看不到任何Lib2类,因为您将其隐藏在Lib1.csproj中。

您真的试图在MVC项目中从Lib2访问类吗?它编译了吗?@Shyju是的,它编译了,并且在IIS Express上成功运行。我注意到的另一件有趣的事情是:如果您进入菜单中的Project->Project Dependencies,您将看到MVC同时依赖于Lib1和Lib2。使用相同的引用结构,ASP.Net之前的核心解决方案将显示MVC仅依赖于Lib1。我有:MVC->AppServices->DataAccess这实际上是真的,这是一个令人沮丧的问题。在编译时,这是不允许的。我不确定这个决定是什么。代码编写过程中的关注点分离可能会被违反,因为泄漏的引用使您能够直接调用数据访问类。@aiapatag我在问这个问题时使用了Lib1和Lib2,但我问这个问题的原因正是您的场景-我的Lib1是应用服务,我的Lib2是数据访问。显然,传递性项目引用现在是一项新功能:(