Visual Studio не запускает вывод сборки
Я работаю над собственной системой проектов, основанной на MPF
, Для сборки я определил пользовательский целевой файл, который определяет минимальный набор требуемых целей, таких как Build
, Clean
а также Rebuild
так что проект хорошо интегрируется с IDE Visual Studio; например, я могу запустить сборку для загруженного проекта с помощью сочетания клавиш F6, при этом сочетание клавиш Ctrl+F5 также должно запускать приложение, если сборка прошла успешно. Но нет... вывод сборки сигнализирует об успехе, но Visual Studio не пытается запустить приложение? Я хотел бы знать, чего не хватает...
Мой пользовательский файл проекта не импортируется Microsoft.Common.targets
, поскольку это не управляемый язык, и большинство вещей, предоставляемых общей целью сборки, просто не применимы к моей системе проектов (также я хотел бы сохранить интеграцию MSBuild как можно более тонкой).
Я читаю документацию по адресу: https://msdn.microsoft.com/en-us/library/vstudio/ms171468(v=vs.110).aspx; в разделе "Отладка" упоминаются следующие свойства MSBuild: OutputPath
, AssemblyName
а также OutputType
; мой обычай Build
target устанавливает все эти свойства, поэтому я предположил, что Visual Studio знает все, что требуется для запуска моего приложения (конечно, даже если моя языковая служба еще не поддерживает отладку).
Build
определение цели выглядит следующим образом...
<Target Name="Build"
DependsOnTargets="PrepareBuildProperties"
Returns="$(TargetPath)">
</Target>
Я посмотрел на Microsoft.Common.targets
файл и нашел Run
цель также. Комментарий говорит...
Запустите окончательный вывод сборки, если это.EXE
и это в основном делает это (это сокращенная версия исходного определения цели)...
<Target Name="Run"
DependsOnTargets="$(RunDependsOn)">
<Exec Command="$(TargetPath) $(StartArguments)"
WorkingDirectory="$(OutDir)" />
</Target>
Должна ли Visual Studio вызывать эту цель, если я выберу Start without debugging
команда от Debug
меню или нажмите Ctrl+F5?
1 ответ
Прежде всего, это утверждение:
Мой пользовательский файл проекта не импортирует Microsoft.Common.targets, поскольку он не является управляемым языком
не имеет особого смысла, так как любой язык может использовать файлы MSBuild .Targets, а не только управляемые языки. Например, создание проектов VC++ сильно зависит от таких файлов. Теперь вернемся к проблеме.
вывод сборки сигнализирует об успехе, но Visual Studio не пытается запустить приложение? Я хотел бы знать, чего не хватает
Современные версии Visual Studio не имеют ничего общего с созданием проектов или выполнением выходных файлов. MSBuild управляет всем процессом. Вы должны будете указать где-нибудь, что вам нужно выполнить какой-то файл после сборки проекта.
Вы можете использовать цель AfterBuild, чтобы указать задачу, которая будет выполнена после завершения сборки. Этот тег находится внутри тега Project файла проекта. Вы также можете указать условия, чтобы задача выполнялась только тогда, когда они выполнены.
Другой способ - использовать пользовательские шаги сборки, как описано здесь. Этот метод немного более гибкий.
Существует третий способ, но, вероятно, наименее предпочтительный. Вы можете использовать события после сборки. Чтобы определить событие после сборки, добавьте его в тег Project:
<PropertyGroup>
<PostBuildEvent> task command goes here </PostBuildEvent>
</PropertyGroup>
Проблема в том, что он будет отображаться на вкладке "События сборки" в свойствах проекта, и пользователь сможет его увидеть и, возможно, изменить. События после сборки предназначены для использования пользователем, а не IDE.
Exec
упомянутый вами тег представляет собой встроенную задачу, указывающую, что содержимое тега следует интерпретировать как командную строку, которая должна быть выполнена. Три техники, рассмотренные выше, являются абстракциями поверх Exec
задача. Эта задача запускается при нажатии Start without debugging
,