zoukankan      html  css  js  c++  java
  • 阻止新的csproj工程的dll引用继承

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

    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的操作。但是,有的时候,这个却不是我们想要要的结果,例如如下的场景:

    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" />

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

  • 相关阅读:
    UISearchBar的常用代理
    iOS 上传图片压缩大小设置
    __weak typeof(self)weakSelf = self;的解释和使用
    运动事件(MotionEvent)
    iOS 获取当前window
    保留小数
    ios 转图片
    iOS提示弹窗
    iOS 获取ip地址
    微信小程序 watch监听数据变化 类似vue中的watch
  • 原文地址:https://www.cnblogs.com/TianFang/p/10064001.html
Copyright © 2011-2022 走看看