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>""$(SolutionDir)" 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 не сообщала об ошибке, когда приложение действительно успешно завершилось?