阻止新的csproj工程的dll引用继承

栏目: 编程语言 · 发布时间: 7年前

内容简介:VisualStudio传统的csproj工程中,引用是没有继承功能的。例如,对于如下一个引用关系程序App在没有添加Assembly 2的引用的情况下,是不能直接访问Assembly 2的方法的。我们必须手动添加Assembly 2的引用。

VisualStudio传统的csproj工程中,引用是没有继承功能的。例如,对于如下一个引用关系

阻止新的csproj工程的dll引用继承

  1. App引用Assembly 1

  2. Assembly 1引用Assembly 2

程序App在没有添加Assembly 2的引用的情况下,是不能直接访问Assembly 2的方法的。我们必须手动添加Assembly 2的引用。

在VisualStudio 2017中,Visua Studio引入了一个新的csproj格式(默认应用在.net core程序中启用),新格式下dll引用是默认可以继承的,也就是说,App可以直接访问没有引用的程序及Assembly 2的。

在大部分场景下,这是一个非常好的特性,大大减少了我们手动引用dll的操作。但是,有的时候,这个却不是我们想要要的结果,例如如下的场景:

阻止新的csproj工程的dll引用继承

Assembly2为原始的DB API,我在Assembly1中对它进行了封装成了API Wrapper。但是,由于程序集引用的继承,在APP中仍然可以访问原始的DB API。这个就不是我们想要的效果了。

另外,默认继承也会带带如下问题

  1. 不同项目中的程序集聚合导致名字空间污染

  2. 程序集继承引用导致智能提示中增加不少不感兴趣的候选项。

对于这些种情况,VisualStudio中也是提供了较好的解决方案的,那就是在PackageReference或ProjectReference中,增加PrivateAssets="All"设置即可。

< PackageReference   Include = " Microsoft.AspNetCore.Razor.Design "   Version = " 2.1.2 "   PrivateAssets = " All "  />

这样,引入的程序集就不会向下传递了。关于该特性的更多描述,可以参考微软官方文档:


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Effective Java: Second Edition

Effective Java: Second Edition

Joshua Bloch / Addison-Wesley / 2008-05-28 / USD 54.99

Written for the working Java developer, Joshua Bloch's Effective Java Programming Language Guide provides a truly useful set of over 50 best practices and tips for writing better Java code. With plent......一起来看看 《Effective Java: Second Edition》 这本书的介绍吧!

HTML 压缩/解压工具
HTML 压缩/解压工具

在线压缩/解压 HTML 代码

随机密码生成器
随机密码生成器

多种字符组合密码

正则表达式在线测试
正则表达式在线测试

正则表达式在线测试