动态更改命名空间和程序集名称

时间:2013-06-05 17:07:53

标签: c# dll .net-assembly cil il

基本上,我开发了一个小型库,其中包含我在所有项目中使用的一些常见功能。出于某些政治原因,我无法为该库选择通用名称(包括命名空间和程序集名称)。通常,它必须包含企业名称,类似于命名空间的名称:Enterprise.ProjectName.XXX.YYY

目前,我正在复制我的库,然后我用Visual Studio手动重命名命名空间,最后我重新编译整个事情。 所以我的问题如下:是否可以创建一个小程序,将程序集作为输入,将所有名称空间从MyLibrary.XXX.YYY重命名为Enterprise.ProjectName.XXX.YYY以及程序集名称?

要遵循的步骤是什么?

[编辑]

自动生成程序集似乎很有效。我将使用resharper和/或CTRL + ALT + F,就像我到目前为止一样。谢谢你的答案......

2 个答案:

答案 0 :(得分:3)

您可以使用Mono的Cecil项目来反汇编程序集,检查每种类型,重命名或使用新命名空间重新创建类型,并生成生成的程序集。

话虽这么说,使用像Resharper这样的工具可能会更简单,它允许你在代码库中rename namespaces correctly

答案 1 :(得分:1)

一些选项:

  1. 如果要将库的整个源代码复制到新项目中,可以使用Resharper之类的重构工具来“调整命名空间”。这是一个非常快速和安全的重构。

  2. 如果您只需要避免运送内部命名的程序集,则可以在构建后步骤中使用ILMerge来“隐藏”内部程序集。如果它只是二进制输出目录中最终程序集名称的感知问题,那么这是可行的。

  3. 通过将您的内部库描述为与任何其他第三方依赖项没有区别来处理政治层面的问题。然后命名不再是问题。如果您将此库的源代码发送给多个客户端,这可以解决其他问题,因为它澄清了您没有将“共享”代码的完全所有权提供给每个客户端。否则,他们可能会争辩说,不允许您在其他客户的项目中使用该“共享”代码,因为它显然属于他们,在名称空间中具有企业名称。