Есть ли отличия от командной строки события сборки Visual Studio и обычной командной строки?

Я создаю тестовый проект (CxxTest) с помощью Visual Studio и сразу же выполняю его через событие после сборки. Это работает и так уже давно. Теперь у меня другое поведение при выполнении в событии после сборки по сравнению с выполнением вручную из командной строки. Следующий код ведет себя иначе в событии после сборки по сравнению с запуском exe вручную или с помощью отладчика Visual Studio:

// getValueFromStruct returns empty string when executed
// as post build event, but returns correct value when executed manually
std::string expectedValue1("Val_1");
TS_ASSERT_EQUALS(expectedValue1, getValueFromStruct(res1));

Это вспомогательная функция называется:

   std::string getValueFromStruct(tResult pResult)
{
std::string result = "";
if (pResult.pCharDetails != NULL)
{
for (int i=0; i < pResult.iNumResults; i++)
{
result.append(1, static_cast<char>(pResult.pCharDetails[i].wChar1));
}
}

// also the cout of the result is empty when executed from
// build event, but is filled with data when in shell
std::cout << ++callCount << " : " << result<< std::endl;
return result;
}

Кажется, проблема возникает только тогда, когда getValueFromStruct (tResult) вызывается для более чем одного экземпляра tResult в одном и том же методе.

Есть ли различия между средой, библиотекой времени выполнения или чем-то еще между этими двумя способами? Visual Studio управляет средой командной строки для события сборки?

Вопрос возникает в Только релиз и режим x64. И это происходит только на моей машине, а не на сервере сборки. Но это также возникает при сборке на моей машине через скрипт сборки, как это делает сервер.

Я нашел 3 способа обойти проблему:

  • используя временную переменную, а не передавать результат
    функционировать непосредственно в качестве аргумента.
  • Отключить оптимизацию для test.exe
  • Установите для параметра «Расширение встроенной функции» значение «Отключено / Ob0» для test.exe.

Но это не объясняет, почему он ведет себя по-разному в событиях сборки и обычной командной строке.

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …