如何在构建后的事件中修复MSB3073错误?

我正在做一个项目,要求把通过构建我的解决方案产生的DLLs从bin文件夹复制到另一个文件夹,这两个文件夹都在我的机器上,在我的C盘中。我写了一个批处理文件,使用xcopy来完成这个任务,你可以在这里看到:

xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.dll" "C:\inetpub\wwwroot\AppServer\bin\"
xcopy /s /y /q "C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Server\bin\Debug\Organizr.Services.pdb" "C:\inetpub\wwwroot\AppServer\bin\"

现在,我已经尝试了这个文件的无数次迭代,它位于:

C:\Users\scogan\Desktop\CopyFiles.bat

所以我的构建后事件命令行看起来像这样:

call C:\Users\scogan\Desktop\CopyFiles.bat

我已经用桌面上的文件夹中的两个文本文件单独运行了这个批处理文件,而且运行良好。我也曾用我需要复制的文件按原样运行,效果也不错。然而,当我试图把它作为一个重建后的事件运行时,我得到这样的输出:

1>  Organizr -> C:\Users\scogan\Documents\Visual Studio 2012\Projects\Organizr\Client\bin\Debug\Organizr.exe
1>  File not found - Organizr.Services.dll
1>  0 File(s) copied
1>  0 File(s) copied
1>  File not found - Organizr.Services.pdb
1>c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "call C:\Users\scogan\Desktop\CopyFiles.bat" exited with code 4.

我做了一些研究,发现错误代码4意味着"发生初始化错误。没有足够的内存或磁盘空间,或者你在命令行上输入了无效的驱动器名称或无效的语法,"

我也查了一下MSB3073是什么,并没有发现什么可以帮助我的地方。所以,我的问题是我做错了什么?绝对路径是不是把它搞乱了?希望得到任何帮助。

解决办法

通过玩不同的项目属性,我发现问题出在项目的构建顺序上。生成我想复制的文件的项目是次构建的,但作为构建后事件运行批处理文件的项目是次构建的,所以我简单地将构建事件附加到第二个项目上,结果就很好。谢谢大家的帮助,不过。

评论(1)

倾向于在AfterBuild目标中的MsBuild "Copy"任务,而不是后建事件。

将此目标追加到你的项目文件中,并删除PostBuildEvent。



评论(6)

值得一提的是,我的问题是由于在 "复制 "命令中使用'/'作为目录分隔符造成的。必须使用反斜线。

评论(0)