2014-02-17 4 views
1

У нас есть два способа запуска тестов на нашем продукте. Один из них локальный (с использованием MsTest и VS), а другой - с удаленной машиной (назовем ее M). При загрузке кода в M, M использует пакетный скрипт для создания классов конфигурации из xml-файлов (которые хранятся в M) и создает продукт с помощью csc.exe. При выполнении тестов с локальной машины файлы xml не используются, вместо этого конфигурация выполняется из классов памяти. Это означает, что мы должны каждый раз вносить изменения в код в зависимости от того, где мы хотим запускать тесты - наследовать от разных классов конфигурации (в классе конфигурации памяти или в классе внешней конфигурации).Как отличить сборку VS и сборку csc.exe?

Следовательно, есть ли способ узнать во время выполнения, если SW был создан с использованием VS или сценария .cmd?

+0

Конечно, лучше назначить M для досрочного выхода на пенсию. В частности, если парень, который сделал это, больше не существует и/или никто не может понять его работу. Вместо этого используйте MSBuild.exe. –

ответ

0

Вы можете использовать другую конфигурацию сборки из VS и из сценария, и поэтому вы можете сделать что-то подобное из кода:

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

Просто определить свои собственные конфигурации.

0

Я не знаю о «автоматическом» способе распознавания между сборками, так как VS build также использует 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

Смежные вопросы