C# 批量更改具有条件编译属性的命名空间

C# 批量更改具有条件编译属性的命名空间,c#,regex,C#,Regex,假设我们有一个现有的代码作为 namespace Company.Product1 { class Class1 { } } 现在我们需要改变基于条件符号的名称空间,使其成为 #if PRODUCT1 namespace Company.Product1 #else namespace Company.Product2 #endif { class Class1 { } } 由于我们有数百个类,手动操作将花费大量时间。有什么简单的方法吗?或

假设我们有一个现有的代码作为

namespace Company.Product1
{
    class Class1
    {

    }
}
现在我们需要改变基于条件符号的名称空间,使其成为

#if PRODUCT1
namespace Company.Product1
#else
namespace Company.Product2
#endif
{
    class Class1
    {

    }
}
由于我们有数百个类,手动操作将花费大量时间。有什么简单的方法吗?或者我如何使用正则表达式来实现这一点


任何帮助都将不胜感激。

在两个不同的名称空间中使用相同的代码似乎是一种反模式,但您可能有一些我不知道的原因,因此我将尝试回答您的问题。另外,请注意,像Resharper这样的工具可以很容易地使用重构工具重命名整个名称空间

要简单地替换每个源文件中的名称空间定义,可以使用Visual Studio 2013文本编辑器(在以前的版本中也应可用):

1) 选择编辑查找并替换快速替换

2) 在搜索词文本框中输入文本名称空间Company.Product1

3) 在替换术语文本框中输入文本#if PRODUCT1\nnamespace Company.PRODUCT1\n#else\nnamespace Company.Product2\n#endif。请注意如何使用\n输入换行符

4) 确保选中了使用正则表达式。此选项允许您在替换文本中转义换行。您还可以检查匹配大小写和匹配整个单词

5) 将范围设置为整个解决方案


6) 单击“全部替换”
进行替换。

可能重复“在两个不同的名称空间中使用相同的代码似乎是一种反模式,但您可能有一些我不知道的原因,因此我将尝试回答您的问题。”感谢您的这种态度。并非每个向SO发帖的人都能控制他们所处的更大的技术环境。