我处理基于MPF
的自定义项目系统。对于构建,我定义了一个自定义目标文件,该文件定义了Build
,Clean
和Rebuild
等所需的最小目标集,以便项目与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属性:OutputPath
,AssemblyName
和OutputType
;我的自定义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>
答案 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
。