4

基本上,我正在尝试为整个解决方案实现一些构建前和构建后事件,而不仅仅是独立项目。我以前在这里看到过这个问题,但没有解决同样的问题。我创建了两个.targets名为after.TestSolution.sln.targets和的文件before.TestSolution.sln.targets.

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="CreateFile" BeforeTargets="Build">
        <Message Text="Creating a file" Importance="high" />
        <Exec Command="C:\users\me\Desktop\CreateFiles.bat" />
    </Target>
</Project>

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <Target Name="CopyFile" AfterTargets="Build">
         <Message Text="Copying a File" Importance="high" />
         <Exec Command="C:\users\me\Desktop\CopyFiles.bat" />
     </Target>
</Project>

这些只是简单的测试批次,以查看事件是否有效。然后我从命令行通过 MSBuild 构建解决方案:这完全有效。MSBuild 在解决方案构建之前在“之前”执行代码,之后在“之后”执行代码。但是,问题是当我从 VS 构建解决方案时,批次永远不会运行。所以,我不确定这是为什么。我对 MSBuild 任务相当陌生。

4

1 回答 1

2

这是一个已知的 VS 功能/错误。如前所述,VS 的构建方式与 msbuild 不同。命令行上的 Msbuild 从解决方案生成一个 msbuild 文件(如果将 MSBUILDEMITSOLUTION 环境变量设置为 1,您将看到为您的解决方案生成的 .metaproj 文件,其中导入了之前/之后的目标)。我的理解是 VS 并没有这样做,而是以编程方式调用 msbuild,没有解决方案的扩展点。

于 2013-09-05T17:51:03.977 回答