1

我在一个基于MPF. 对于构建,我定义了一个自定义目标文件,该文件定义了所需的最小目标集,例如Build,以便项目与 Visual Studio IDE 很好地集成CleanRebuild例如,我可以使用快捷键触发已加载项目的构建,如果构建成功F6,快捷键Ctrl+也应该运行应用程序。F5但是,不……构建输出信号成功,但 Visual Studio 不尝试启动应用程序?我想知道缺少什么...

我的自定义项目文件不导入Microsoft.Common.targets,因为它不是托管语言,并且公共构建目标提供的大多数东西都不适用于我的项目系统(我也希望 MSBuild 集成尽可能精简)。

我在以下位置阅读了文档:https ://msdn.microsoft.com/en-us/library/vstudio/ms171468(v=vs.110).aspx ;在调试部分中提到了以下 MSBuild 属性OutputPathAssemblyNameOutputType; 我的自定义Build目标设置了所有这些属性,所以我假设 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>

如果我Start without debugging从菜单中选择命令,Visual Studio 应该调用这个目标Debug,还是按Ctrl+ F5

4

1 回答 1

-1

首先,这个声明:

我的自定义项目文件不导入 Microsoft.Common.targets,因为它不是托管语言

没有多大意义,因为任何语言都可以使用 MSBuild .Targets 文件,而不仅仅是托管语言。例如,构建 VC++ 项目在很大程度上依赖于这些文件。现在回到问题。

构建输出信号成功,但 Visual Studio 不尝试启动应用程序?我想知道缺少什么

现代版本的 Visual Studio 与构建项目或运行输出文件无关。MSBuild 管理整个过程。您必须指定在项目构建后需要执行某些文件的位置。

您可以使用AfterBuild 目标指定构建完成后要执行的任务。此标记位于项目文件的 Project 标记内。您还可以指定条件,以便仅在满足条件时执行任务。

另一种方法是使用此处讨论的自定义构建步骤。这种方法更灵活一些。

还有第三种方式,但可能是最不受欢迎的方式。您可以使用构建后事件。要定义构建后事件,请在 Project 标签下添加:

<PropertyGroup>
    <PostBuildEvent> task command goes here </PostBuildEvent>
</PropertyGroup>

这样做的问题是它会出现在项目属性的 Build Events 选项卡中,因此用户可以看到它并可能更改它。构建后事件旨在供用户使用,而不是 IDE。

您提到的Exec标签代表一个内置任务,指示标签的内容应该被解释为应该执行的命令行。上面讨论的三种技术都是对Exec任务的抽象。该任务在您单击 时运行Start without debugging

于 2015-07-11T20:01:08.247 回答