C# 如何区分VS build和csc.exe build?

C# 如何区分VS build和csc.exe build?,c#,C#,我们有两种方法对产品进行测试。一个是使用MsTest和VS的本地,另一个是使用远程机器(我们称之为M)。将代码上载到M时,M使用批处理脚本从保存在M中的xml文件生成配置类,并使用csc.exe构建产品。当从本地计算机运行测试时,不使用xml文件,而是从内存类中获取配置。这意味着我们每次都必须根据运行测试的位置对代码进行更改—从内存配置类或外部配置类中的不同配置类继承 因此,有没有办法在运行时知道软件是使用VS还是.cmd脚本构建的?您可以使用不同于VS和脚本的构建配置,因此您可以从代码中执行以

我们有两种方法对产品进行测试。一个是使用MsTest和VS的本地,另一个是使用远程机器(我们称之为M)。将代码上载到M时,M使用批处理脚本从保存在M中的xml文件生成配置类,并使用csc.exe构建产品。当从本地计算机运行测试时,不使用xml文件,而是从内存类中获取配置。这意味着我们每次都必须根据运行测试的位置对代码进行更改—从内存配置类或外部配置类中的不同配置类继承


因此,有没有办法在运行时知道软件是使用VS还是.cmd脚本构建的?

您可以使用不同于VS和脚本的构建配置,因此您可以从代码中执行以下操作:

public bool IsDebugBuild
{
    get
    {
    #if DEBUG
        return true;
    #else
        return false;
    #endif
    }
}

只需定义您自己的配置。

我不知道有什么自动方法可以区分版本,因为VS版本在内部也使用csc.exe

但您可以引入一个编译时常量,该常量仅在批处理脚本中生成时定义,例如:

internal static class BuildInfo
{
    internal static bool BuiltByBatchScript
    {
        get
        {
#if BATCH_BUILD
            return true;
#else
            return false;
#endif
        }
    }
}

在批处理脚本中调用csc.exe时,添加以下参数:/define:batch_BUILD

当然最好指定M提前退休。尤其是如果做这件事的人已经不在了,或者没有人能理解他的手艺。请改用MSBuild.exe。