当前位置: 首页 > news >正文

C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性

我只是增加库的一个 API,比如增加几个类而已,应该不会造成兼容性问题吧。对于编译好的二进制文件来说,不会造成兼容性问题;但——可能造成源码不兼容。

本文介绍可能的源码不兼容问题。


本文使用多种语言编写,你可以选择你喜欢的语言阅读:

  • C# 中新增类型的命名空间只需部分与其他命名空间名称相同即可破坏源码兼容性 - walterlv
  • The partial same C# namespace may cause source code compatibility issue - walterlv

比如我有一个项目 P 引用 A 和 B 两个库。其中使用到了 A 库中的 Walterlv.A.Diagnostics.Foo 类型。

using Walterlv.A;
using Walterlv.B;

namespace Walterlv.Demo
{
    class Hello
    {
        Run(Diagnostics.Foo foo)
        {
        }
    }
}

现在,我们在 B 库中新增一个类型 Walterlv.B.Diagnostics.Bar 类型。

那么上面的代码将无法完成编译,因为 Diagnosis 命名空间将具有不确定的含义,其中的 Foo 类型也将无法在不确定的命名空间中找到。

本文其实是在说,即使是单纯的新增 API 也可能会导致使用库的一方在源码级不兼容。当然二进制还是兼容的。


我的博客会首发于 https://blog.walterlv.com/,而 CSDN 会从其中精选发布,但是一旦发布了就很少更新。

如果在博客看到有任何不懂的内容,欢迎交流。我搭建了 dotnet 职业技术学院 欢迎大家加入。

知识共享许可协议

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。欢迎转载、使用、重新发布,但务必保留文章署名吕毅(包含链接:https://walterlv.blog.csdn.net/),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请与我联系。

相关文章:

  • 使用 ProcessMonitor 找到进程所操作的文件的路径
  • MSBuild 在编写编译任务的时候判断当前是否在 Visual Studio 中编译
  • git 配置错误导致无法推送远端仓库?本文介绍各种修复方式
  • WPF 很少人知道的科技
  • WPF 程序的编译过程
  • 制作通过 NuGet 分发的源代码包时,如果目标项目是 WPF 则会出现一些问题(探索篇,含解决方案)
  • .NET 的程序集加载上下文
  • .NET 使用 ILMerge 合并多个程序集,避免引入额外的依赖
  • .NET 使用 ILRepack 合并多个程序集(替代 ILMerge),避免引入额外的依赖
  • Windows 10 解决无法完整下载安装语言包(日语输入法无法下载使用)
  • 从零开始制作 NuGet 源代码包(全面支持 .NET Core / .NET Framework / WPF 项目)
  • 如何快速创建 Visual Studio 代码片段?
  • 从 git 的历史记录中彻底删除文件或文件夹
  • 如果不用 ReSharper,那么 Visual Studio 2019 能还原 ReSharper 多少功能呢?
  • .NET/C# 如何获取当前进程的 CPU 和内存占用?如何获取全局 CPU 和内存占用?
  • @angular/forms 源码解析之双向绑定
  • Android Studio:GIT提交项目到远程仓库
  • es6要点
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • JSDuck 与 AngularJS 融合技巧
  • Nginx 通过 Lua + Redis 实现动态封禁 IP
  • python_bomb----数据类型总结
  • ReactNativeweexDeviceOne对比
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • Vue.js 移动端适配之 vw 解决方案
  • 前端学习笔记之观察者模式
  • 浅谈Golang中select的用法
  • 设计模式(12)迭代器模式(讲解+应用)
  • 腾讯优测优分享 | Android碎片化问题小结——关于闪光灯的那些事儿
  • 微信支付JSAPI,实测!终极方案
  • 我有几个粽子,和一个故事
  • 吴恩达Deep Learning课程练习题参考答案——R语言版
  • 怎么将电脑中的声音录制成WAV格式
  • 曾刷新两项世界纪录,腾讯优图人脸检测算法 DSFD 正式开源 ...
  • #1014 : Trie树
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (2)Java 简介
  • (4)通过调用hadoop的java api实现本地文件上传到hadoop文件系统上
  • (C++17) optional的使用
  • (delphi11最新学习资料) Object Pascal 学习笔记---第7章第3节(封装和窗体)
  • (离散数学)逻辑连接词
  • (入门自用)--C++--抽象类--多态原理--虚表--1020
  • (一)Dubbo快速入门、介绍、使用
  • (转)jQuery 基础
  • (转)ObjectiveC 深浅拷贝学习
  • (总结)Linux下的暴力密码在线破解工具Hydra详解
  • .Net Core缓存组件(MemoryCache)源码解析
  • .NET Framework 4.6.2改进了WPF和安全性
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • .NET开发不可不知、不可不用的辅助类(三)(报表导出---终结版)
  • .NET命名规范和开发约定
  • .NET中的Event与Delegates,从Publisher到Subscriber的衔接!
  • /bin、/sbin、/usr/bin、/usr/sbin
  • @Async注解的坑,小心
  • @html.ActionLink的几种参数格式