Visual Studio 2010与MSBuild生成后事件
我有很多项目的解决方案 在生成后事件中检查主项目程序集的版本,并从Trac RSS中提取与该版本相关联的发行说明,并将其存储为XML文件,以便与应用程序一起提供。这是在生成后事件中完成的 主程序集项目的生成后事件:Visual Studio 2010与MSBuild生成后事件,msbuild,post-build-event,Msbuild,Post Build Event,我有很多项目的解决方案 在生成后事件中检查主项目程序集的版本,并从Trac RSS中提取与该版本相关联的发行说明,并将其存储为XML文件,以便与应用程序一起提供。这是在生成后事件中完成的 主程序集项目的生成后事件: Powershell -File "$(SolutionDir)scripts\makereleasenotes.ps1" $(TargetPath) $(ProjectDir) 这在VS中效果很好 但是,当我们构建部署时,会发生许多其他步骤,因此有一个命令行msbuild,它通过
Powershell -File "$(SolutionDir)scripts\makereleasenotes.ps1" $(TargetPath) $(ProjectDir)
这在VS中效果很好
但是,当我们构建部署时,会发生许多其他步骤,因此有一个命令行msbuild,它通过双击来运行,该命令行执行构建并打包部署
从该进程运行时,生成后步骤似乎没有运行
这是我们使用的命令脚本:
set app_main=%CD%
msbuild app.msbuild /target:Release;Cleanup
app.msbuild有一个目标,其中包括其他目标:
<Target Name="Release" DependsOnTargets="CreateDir;BuildRelease;CopyFiles"/>
以及:
等
因此,您可以看到我们的外部msbuild脚本委托给解决方案,并且在我们的构建中没有编译任何单个项目
将解决方案设置为msbuild脚本中的目标时,是否应运行从属项目的生成后脚本
如果是这样,是什么阻止了我的跑步
如果没有,我假设我必须单独运行它,并为项目级宏(powershell脚本正在使用它检查程序集并编写发行说明XML)提供等效参数。我对MSBuild比较陌生,但我发现您的问题已经在那里等待了4个小时没有答案 首先,我能想到的唯一一件事是,您正在生成后事件中使用宏$(SolutionDir)传递给powershell脚本。也许这会被解析为一个您不期望的目录,因此powershell无法找到它。我个人从不使用任何与解决方案相关的宏,但那只是我自己。当我需要回MSBuild文件的保留路径时,我总是使用$(MSBuildThisFileDirectory),因为我认为它比其他宏更早得到解析。简言之,也许$(SolutionDir)解决得太晚了 第二,也许可以将其他简单的helloworld类型的命令添加到构建事件命令中。有助于打印有关宏解析的调试信息的内容。也许是一些回音命令
很抱歉,如果这没有帮助,但是如果不查看您的实际构建配置,就很难说了 我是MSBuild的新手,但我知道你的问题已经在那里坐了4个小时没有回答了 首先,我能想到的唯一一件事是,您正在生成后事件中使用宏$(SolutionDir)传递给powershell脚本。也许这会被解析为一个您不期望的目录,因此powershell无法找到它。我个人从不使用任何与解决方案相关的宏,但那只是我自己。当我需要回MSBuild文件的保留路径时,我总是使用$(MSBuildThisFileDirectory),因为我认为它比其他宏更早得到解析。简言之,也许$(SolutionDir)解决得太晚了 第二,也许可以将其他简单的helloworld类型的命令添加到构建事件命令中。有助于打印有关宏解析的调试信息的内容。也许是一些回音命令
很抱歉,如果这没有帮助,但是如果不查看您的实际构建配置,就很难说了 问题是由构建和宏路径中的空格引起的(特别是$ProjectDir,以a结尾)。构建脚本将路径设置为包含格式为“yyyy-MM-dd-HH-MM”的空格。这表明Powershell的参数在由这些空格指示时无效 您不能只在后期生成中向参数添加双引号,因为$(ProjectDir)marco将扩展为DRIVE:\something\something\当您在其周围加上“”时,您只会以“DRIVE:\something\something\”结束,它实际上将尾部的\“扩展为”而不是\-这会完全搞乱它
结果只是删除了空格,这样参数就完整了,不需要弄清楚如何在生成后脚本中使用引号。问题是由生成路径和宏中的空格引起的(特别是$ProjectDir,以a结尾)。构建脚本将路径设置为包含格式为“yyyy-MM-dd-HH-MM”的空格。这表明Powershell的参数在由这些空格指示时无效 您不能只在后期生成中向参数添加双引号,因为$(ProjectDir)marco将扩展为DRIVE:\something\something\当您在其周围加上“”时,您只会以“DRIVE:\something\something\”结束,它实际上将尾部的\“扩展为”而不是\-这会完全搞乱它
结果只是删除了空格,这样参数就完整了,不需要弄清楚如何在后期构建脚本中使用引号。我已经输入了
echo'post build'>$(SolutionDir)status.txt
没有发生任何事情,但没有尝试其他文件夹-您可能在那里找到了一些东西-我明天早上会检查。这至少让我找到了解决问题的正确途径。我已经输入了一个echo'post build'>$(SolutionDir)status.txt
没有发生任何问题,但没有尝试其他文件夹-您可能在那里找到了一些东西-我明天早上会检查。这至少让我找到了正确的解决方法。很高兴听到您找到了答案。:)我也有同样的问题。您可以在宏的末尾添加另一个反斜杠,然后用引号将其括起来。例如Foo“$(ProjectDir)\”
,它扩展到例如Foo“C:\Bar Baz\Boop Bap\\”
。双反斜杠被弄乱了,剩下一个带空格的带引号的字符串,它将被解释为一个参数。很高兴听到您解决了这个问题。:)我也有同样的职业球员
<Target Name="BuildRelease" >
<MSBuild Projects="App.Web.Application.sln" Properties="Platform=$(Platform);Configuration=Release;
OutDir=$(ReleaseDir)\$(DTResult)\$(ReleaseConfiguration)\"
Targets="Clean;Rebuild">
<Output ItemName ="OutputFiles" TaskParameter="TargetOutputs"/>
</MSBuild>
etc.