将名称空间包装为条件符号(#if)

时间:2015-12-04 17:52:35

标签: c# regex visual-studio replace visual-studio-2015

我正在为我的程序编写一个简单的库 我编写了很多类,但是在完成所有操作后,我意识到我需要将具有特定命名空间的文件包装到#if条件中。

例如,我在.NET 2.0下编写了System.Numerics的替代实现:

namespace System.Numerics
{
    public class Vector2
    {
        //.. implementation here
    }
}

但是,仅在定义USE_ALTERNATIVE时才适用,因此如果我的目标是等于或大于.NET 3.5,我只需要从编译符号中删除USE_ALTERNATIVE

课程应该是这样的:

#if USE_ALTERNATIVE
namespace System.Numerics
{
    public class Vector2
    {
        //.. implementation here
    }
}
#endif

然而,在我的自定义实现下将#if写入所有类是非常繁琐的工作。

是否可以通过查找和替换Visual Studio中可用的内容来实现此目的?

1 个答案:

答案 0 :(得分:1)

行。实际上有一种非常简单的方法,它根本不需要你实际使用任何 #if条件。

相反,只需将所有垫片类(这是您正在做的技术术语)放在同一个类库项目中。这将把它们全部放在同一个.NET程序集中。

然后,在引用项目中,有两种不同的构建配置,针对不同版本的.NET。在2.0配置的引用列表中,包括库。在3.5配置中,只需将其保留。

编辑:您可以使用的另一个使用#if条件的解决方案是将using指令包装在客户端程序中(而不是自己的shim类)。这样,你只需要在每个使用你的库的客户端类中包含一个#if指令(我假设你的整个项目只包含一个命名空间,对吗?)