Как я могу убедиться, что правильный код завершения передан из исполняемого приложения после сборки в Visual Studio, чтобы я не получил ошибку MSB3073? - PullRequest
0 голосов
/ 04 июля 2018

VS2017 Enterprise, .Net 4.6.2:

Я запускаю небольшое консольное приложение в качестве события пост-сборки проекта. Консольное приложение явно устанавливает Environment.Exitcode на 0, когда оно завершает работу, а также возвращает это значение. Я попытался сделать это как событие пост-сборки Visual Studio, а также определив его как цель в файле csproj для проекта. Однако в обоих случаях Visual Studio сообщает, что приложение завершается с кодом -1, поэтому сборка завершается сбоем с ошибкой, когда не должно.

Код консольного приложения:

public static int Main(string[] args)
{
    try
    {
//do the work
    }
    catch (Exception ex)
    {
        return (int)ExitCode.GeneralError; //-999
    }
    Environment.ExitCode = (int)ExitCode.Success; //0
    return (int)ExitCode.Success;
}

Вот моя цель в рассматриваемом файле csproj:

  <Target Name="AfterBuild" >
    <PropertyGroup>
      <CodeCheckerExe Condition=" '$(CodeCheckerExe)'=='' ">$(SolutionDir)..\Tools\CodeChecker\CodeChecker.exe</CodeCheckerExe>
    </PropertyGroup>
    <PropertyGroup>
          <CodeCheckArgs>&quot;&quot;$(SolutionDir)&quot; stats tests listmissingcopyright</CodeCheckArgs>
    </PropertyGroup>
    <Exec Command="$(CodeCheckerExe) $(CodeCheckArgs)"/>   </Target

Подключив отладчик к консольному приложению, я доказал, что он получает правильные аргументы в ожидаемом формате и успешно завершает работу без ошибок, и все же MSBuild все еще сообщает, что он завершается с кодом выхода -1:

The command "C:\VSSource\pathtoconsoleapp" "filepath" stats tests listmissingcopyright" exited with code -1.

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

1 Ответ

0 голосов
/ 04 июля 2018

В конце я добавил атрибут IgnoreExitCode к элементу Exec в Target. Это, по крайней мере, остановило неправильный код завершения при сбое сборки.

например

<Exec Command="$(CodeCheckerExe) $(CodeCheckArgs)" IgnoreExitCode="True"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...