События пост-сборки Visual Studio застряли в ожидании завершения исполняемого файла перед запуском приложения в режиме отладки - PullRequest
23 голосов
/ 31 августа 2009

Часть пост-сборки моего проекта - это выполнение программы, которую я написал для тестирования основного приложения. К сожалению, процесс пост-сборки в visual studio зависает в ожидании выхода исполняемого файла. Итак, я застрял, закрывая свою тестовую программу, чтобы завершить процесс после сборки и запустить мое приложение. Как мне изменить это, чтобы VS не ждал возврата программы перед запуском? Спасибо.

Ответы [ 7 ]

16 голосов
/ 09 января 2015

Я также обнаружил, что трюк start не сработал, и загрузка отдельного инструмента для выполнения такой простой задачи казалась чрезмерной. После некоторого дополнительного поиска я нашел этот пост , который дал ответ, который работал для моих нужд.

Просто замените <actual-command-line-to-run> своей командой. Не забудьте указать полный путь к исполняемому файлу и заключить его в «кавычки», если на вашем пути есть пробелы.

powershell start-process <actual-command-line-to-run>
10 голосов
/ 11 декабря 2010

Ух ты, кажется, VS очень упрям ​​в этом.

Вы можете использовать этот маленький инструмент , который может запускать приложения без отображения окон cmd (помимо прочего). В вашем посте событие сборки:

c:\path\to\cmdow /run app.exe
3 голосов
/ 01 июня 2011

Это, кажется, известная проблема VS 2010 (например, здесь и здесь ), и, похоже, она не будет исправлена ​​, что в ближайшее время.

Что касается возможного обходного пути, подобного тому, который упоминал @RichieHindle, один из сотрудников MS Connect предлагает:

START /WAIT cmd /c YourPostBuildTool.exe
1 голос
/ 31 августа 2009

Запуск вашей тестовой программы через start может работать. Измените шаг пост поста с этого:

runtest.exe

к этому:

start runtest.exe
0 голосов
/ 21 мая 2016

Я потратил немало времени, пытаясь понять это. То, что вам нужно сделать, это поместить "cmd" в качестве первой строки вашего события после сборки.

Пример может выглядеть так:

cmd
xcopy /Y $(ProjectDir)$(OutputDir)* C:\SomePath\*
0 голосов
/ 07 июля 2011

Я загрузил патч в MSBuild Extension Pack, который реализует пользовательскую задачу msbuild под названием SmartExec, которая решает эту проблему.

http://msbuildextensionpack.codeplex.com/workitem/9053
http://msbuildextensionpack.codeplex.com/SourceControl/list/patches
Код патча 9878

0 голосов
/ 14 декабря 2010

Если вы используете круиз-контроль для своих сборок, вы можете поместить это в раздел издателей, который позволяет завершить сборку перед запуском задач издателя.

Кроме того, пользовательская задача msbuild довольно проста в сборке, если вы знаете, как запустить процесс в .net, то в msbuild это действительно просто сделать. Для этого вы можете отредактировать файл .csproj или скрипт сборки .proj, чтобы использовать это пользовательское задание.

using System;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;

namespace MyTasks
{
public class SimpleTask : Task
{
    public override bool Execute()
    {
//something involving Process.Start
        return true;
    }
}
}

Затем в вашем скрипте сборки или файле csproj вы добавляете использование для созданной вами задачи и вызываете ее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...