2017-10-12 66 views
2

我正在写一个使用ASP.NET Core 2.0的MVC网站。禁用.NET标准2中的传递项目引用

在ASP.NET Core项目中(我们称之为Web),我在同一个解决方案中引用了.NET Standard 2项目(我们称它为Service)。 Service项目也引用了解决方案中的第三个.NET Standard 2库(我们称之为Business)。 Business项目声明了一个名为Model的类型。

的问题是,我可以在Web项目中使用Model(即编译器看到类型Model,我可以做var a = new Model();)仿佛Web项目中引用Business,但它实际上只需要Service参考。如何隐藏ModelWeb?这是ASP.NET Core 2中的一项新功能还是所有.NET Standard项目都是这样的?

编辑

按照规定here,这是由于传递项目引用这是一个新的“功能”,在.NET标准,但如何解决?

+0

我相信这是新项目格式('project.json'和'csproj'现在)的一个特性。任何嵌套的引用都可以直接在项目中使用(又名[transitive dependencies](https://github.com/dotnet/sdk/issues/200))。您可以尝试[这种方式](https://github.com/dotnet/project-system/issues/2313)将其关闭以供单个参考。 –

+0

[.Net Core 1.1中的传递引用]的可能重复(https://stackoverflow.com/questions/42428571/transitive-references-in-net-core-1-1) –

回答

-1

试图让模型类的内部类,而不是一个公共类

+1

如果'Model'在'Business '在'服务'中无法访问。我没有投票,但:) – Emad

+1

OP没有试图隐藏其他程序集的类,他试图用.NET Standard/.NET Core项目来模拟* old *行为(没有间接的依赖关系)。 –

+1

我现在明白了。感谢您解释它 –

1

那么我的问题是,接近一个标记为复制在这里,但要解决它需要不同的策略。

感谢来自“Federico Dipuma”的评论和给出的答案here我能解决这个问题。

您应该编辑Service.csproj文件,并添加你不想流向顶部PrivateAssets="All"ProjectReference键。

<ItemGroup> 
    <ProjectReference Include="..\Business.csproj" PrivateAssets="All" /> 
</ItemGroup> 
相关问题