Часть пост-сборки моего проекта - это выполнение программы, которую я написал для тестирования основного приложения. К сожалению, процесс сборки сообщений в визуальной студии блокируется, ожидая выхода исполняемого файла. Итак, я закрыл свою тестовую программу, чтобы завершить процесс сборки и запустить приложение. Как изменить это, чтобы VS не дождался возврата программы до запуска? Спасибо.
События после сборки Visual Studio застряли в ожидании завершения исполняемого файла до запуска приложения в режиме отладки
Ответ 1
Я также обнаружил, что трюк start
не работал, и загрузка отдельного инструмента для выполнения такой простой задачи казалась чрезмерной. После некоторого дополнительного поиска я нашел этот SO сообщение, которое дало ответ, который работал для моих нужд.
Просто замените <actual-command-line-to-run>
на вашу команду. Не забудьте указать полный путь к исполняемому файлу и инкапсулировать его в "кавычки", если в вашем пути есть пробелы.
powershell start-process <actual-command-line-to-run>
Ответ 2
Ничего себе, кажется, что VS действительно упрям в этом вопросе.
Вы можете использовать этот маленький инструмент, который может запускать приложения, не показывая cmd-окна (между прочим). В вашем событии после сборки:
c:\path\to\cmdow /run app.exe
Ответ 3
Это, похоже, известная проблема VS 2010 (например здесь и здесь), и, похоже, в ближайшее время не будет исправлено.
Что касается возможного обходного пути, аналогичного тому, который упоминается в @RichieHindle, один из сотрудников MS Connect предлагает:
START /WAIT cmd /c YourPostBuildTool.exe
Ответ 4
Работа вашей тестовой программы через start
может работать. Измените шаг своей публикации:
runtest.exe
:
start runtest.exe
Ответ 5
Если вы используете круиз-контроль для своих сборников, вы можете поместить это в раздел издателей, который позволяет завершить сборку, прежде чем запускать задачи издателя.
Кроме того, пользовательская задача msbuild довольно сложна для сборки, если вы знаете, как открутить процесс в .net, тогда это действительно просто делать в msbuild. Для этого вы можете отредактировать файл .csproj или ваш .proj build script, чтобы использовать эту настраиваемую задачу.
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;
}
}
}
Затем в вашем файле сборки script или csproj вы добавляете использование для созданной задачи и вызываете ее.
Ответ 6
Я загрузил патч в MSBuild Extension Pack, который реализует пользовательскую задачу msbuild под названием SmartExec, которая работает вокруг этой проблемы.
http://msbuildextensionpack.codeplex.com/workitem/9053
http://msbuildextensionpack.codeplex.com/SourceControl/list/patches
Патч Id 9878
Ответ 7
Я потратил немало времени, пытаясь понять это. Что вам нужно сделать, так это разместить "cmd" в качестве первой строки вашего события после сборки.
Пример может выглядеть так:
cmd
xcopy /Y $(ProjectDir)$(OutputDir)* C:\SomePath\*