C# 在构建期间重命名命名空间

C# rename namespaces during build

我正在寻找一种在构建过程中重命名第 3 方程序集中的名称空间的方法(以及用户代码中的相应 using 语句)。我搜索了 fody's weavers 但没有找到这样的东西。有一个对 ILRepack 的拉取请求,它确实做了一些事情,但它似乎已经过时并且没有通过 CI:https://github.com/gluck/il-repack/pull/268

假设我有两个项目,A 和 B,都经过核化并且 B 对 A 具有包依赖性。因为我不想在引用 B 时将使用者锁定在 A 上的特定版本上,所以我使用 ILRepack 将 A 合并到 B 中并在那里内化 A,但是尽管 A 被内化到 B 中,当消费者在他的项目 C 中使用 A 和 B 时,A 在 类 上存在类型歧义。

NEST 包(elasticsearch 客户端 https://github.com/elastic/elasticsearch-net)用 Newtonsoft.Json 包做了完全一样的事情。

我想通了。有两种解决方案:

ILRepack

ILRepack 有选项 InternalizeRenameInternalizedInternalize 会将合并程序集的 public 修饰符更改为 internal,而 RenameInternalized 会将一些随机 guid 附加到这些类型名称。所有用法也已正确重命名。

程序集重写器

https://github.com/nullean/assembly-rewriter

重写程序集和重命名命名空间的 Dotnet 工具。仅限于与程序集文件名相同的根命名空间。