Visual Studio无法启动构建输出

时间:2015-07-02 14:49:11

标签: visual-studio msbuild visual-studio-extensions vsx mpf

我处理基于MPF的自定义项目系统。对于构建,我定义了一个自定义目标文件,该文件定义了BuildCleanRebuild等所需的最小目标集,以便项目与Visual Studio IDE完美集成;例如,我可以使用 F6 快捷键触发已加载项目的构建,其中快捷方式 Ctrl + F5 也应该运行应用程序建立成功。但是,nope ...构建输出信号成功,但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菜单中选择Debug命令,或按 Ctrl + F5 ,Visual Studio是否应调用此目标?< / p>

1 个答案:

答案 0 :(得分:-1)

首先,这句话:

  

我的自定义项目文件不会导入Microsoft.Common.targets,因为   这不是一个有管理的语言

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

  

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

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

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

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

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

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

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

您提到的Exec标记表示内置任务,指示标记的内容应解释为应执行的命令行。上面讨论的三种技术都是Exec任务之上的所有抽象。单击Start without debugging

时会运行此任务