VS 2008 Post Build Step有趣的事情
好的,这是我的项目的分解:我有一个带有"脚本"子文件夹的Web项目。该文件夹包含一些javascript文件和JSMin.exe的副本,以及在其中一些文件上运行JSMin.exe的批处理文件。我试图设置一个后构建步骤"调用" $(ProjectDir)Scripts \ jsmin.bat""。当我执行构建时,批处理文件总是"已退出代码1"。通过Visual Studio或者通过msbuild命令行会发生这种情况。我可以从Scripts文件夹中手动运行该批处理文件,它似乎可以按预期工作,因此我不确定这里的问题是什么。 $(ProjectDir)Scripts \ jsmin.bat调用用引号引起来,因为$(ProjectDir)可以有空格(实际上在我的机器上也有)。我现在不确定该怎么办。我曾尝试在批处理构建步骤中删除批处理文件的内容,但这似乎也不起作用。
理想情况下,我想通过后期或者预构建步骤解决此问题,以使构建管理器在部署代码时不必执行额外的步骤。
谢谢!
解决方案
如果自定义构建步骤中有某些返回错误代码的内容,则可以添加:
exit 0
作为构建步骤的最后一行。这将阻止构建失败。
不知何故,我不熟悉.bat文件如何退出的细节,但是JSMin或者批处理文件的执行都以非零返回码退出。
在构建后,我们是否尝试过直接运行脚本(即不通过JSMin.bat)?
编辑:看起来哈格里姆拥有它。
脚本或者批处理文件是否在内部使用任何路径引用?
我发现,如果路径引用不完全合格,则批处理文件将无法正常工作。
示例:名为DoStuff.bat的批处理文件使用echo命令添加文本文件。
这在.bat文件中不起作用:
echo "test" >>"test.txt"
这确实在.bat文件中起作用:
echo "test" >>"C:\Temp\CompileTest\test.txt"
Visual Studio生成后事件命令行是这样的:
call "C:\Temp\CompileTest\DoStuff.bat"
现在回到这个问题(不得不转移到其他火灾上)
@乔纳森·韦伯我尝试了一些想法,但没有成功。实际上,我了解到我们在其他内部项目中正在做类似的事情(使用后期构建任务调用外部程序)。我倾向于认为这是与jsmin.exe工具的某种交互,或者是我自己的其他一些愚蠢的错误。
但是,一切并没有丢失,另一个开发人员将我的注意力转向了YUI Compressor及其在.NET中的实现。通过一些手动的.csproj操纵,我能够实现自己的目标,然后达到某些目标(包括CSS压缩)!
为此,我使用的工作解决方案:
光盘$(ProjectDir)
DoStuff.bat
无需调用命令或者其他任何命令,当然,如果项目目录中有该文件,则不需要这样做。