Post Build exited with code 1

I have a project with a post build event:

copy $(ProjectDir)DbVerse\Lunaverse.DbVerse.*.exe  $(TargetDir)

It works fine every time on my machine. I have a new developer who always gets the "exited with code 1" error. I had her run the same command in a DOS prompt, and it worked fine. What could be causing this? Is there any way to get to the real error?

We are both using Visual Studio 2008.

176553 次浏览

从 SysInternals 获取进程监视器 设置它来观察 Lunaverse.DbVerse (在 Path 场上)看手术结果。 从这里就可以很明显地看出哪里出了问题

她在路径中的一个文件夹名中有一个空格,周围没有引号。

作为一个良好的实践,我建议您将 post build 事件替换为 复制任务

有“ Pings”的那个帮了我,不过可以解释得更清楚一点。

对我来说,解决办法就是改变:

copy $(TargetDir)$(TargetName).* $(SolutionDir)bin

回到这里:

copy "$(TargetDir)$(TargetName).*" "$(SolutionDir)bin"

希望对你有用。 : -)

我使用代码1的原因是目标文件夹是只读的。希望这对某些人有所帮助! 我有一个 post build 事件,用于从一个目录复制到另一个目录,目标是只读的。所以我只是去,并取消检查只读属性的目录及其所有子目录!只要确保它是一个目录,这样做是安全的!

对我来说,我必须确保程序,我是应对文件不运行的时间。语法上没有任何错误。希望这对谁有帮助。

我必须以管理员的身份运行 VS,以使我的后期版本能够在一个受操作系统保护的“ . Common7 IDE PrivateAssembly”中工作

因为这是一个非常活跃的问题,我已经为未来的访问者添加了这个。

ROBOCOPY 退出时带有小于8的“成功代码”。参见: http://support.microsoft.com/kb/954404

这意味着:

robocopy exit code 0 = no files copied
robocopy exit code 1 = files copied
When the result is 1, this becomes an error exit code in visual studio.

So i solved this easily by adding this to the bottom of the batch file

exit 0

建议以这种方式处理 ROBOCOPY 错误

rem each robocopy statement and then underneath have the error check.
if %ERRORLEVEL% GEQ 8 goto failed


rem end of batch file
GOTO success


:failed
rem do not pause as it will pause msbuild.
exit 1


:success
exit 0

当没有文件被复制 = VS 中没有错误时,混乱就会出现。然后当有更改时,文件确实被复制了,VS 错误但是开发人员想要的一切都已经完成了。

附加提示: 不要在脚本中使用暂停,因为这将成为 VS 构建中的无限期暂停。在开发脚本时,使用类似于 timeout 10的代码。您将注意到这一点并将其注释掉,而不是使用挂起的构建。

我刚刚收到同样的错误。目标路径中有一个% 需要转义

c:\projects\%NotAnEnvironmentVariable%

必须如此

c:\projects\%%NotAnEnvironmentVariable%%

对于那些在 工程项目-> 物业生成事件(预生成事件命令行或/和 生成后事件命令行)中使用‘ 收到’命令的人来说: ‘ 收到’命令参数应该如下所示: copy "source of files" "destination for files"。记住使用引号(以避免地址字符串中的空格问题)。

So many solutions...

在我的例子中,我必须用非 unicode (Western,Windows)编码保存 bat 文件。默认情况下,当我将文件添加到 Visual Studio 时(也许我应该在 VS 之外完成) ,它使用 UTF-8编码进行添加。

我能够通过以管理员身份运行 VisualStudio 来修复代码1。显然,没有管理员,它无法执行 shell 命令。

好吧,这是一个有很多解决方案的问题,所以我只是发布我的给人们更多的提示。 我的情况是仔细检查路径中的文件夹,并确保它们都存在于计算机中。例如: “ $(SolutionDir) partBin Bin $(ProjectName)。“ pdb”,但是“ Bin”不在 partBin 文件夹中。

我也有同样的问题,结果是因为我重新命名了这个项目。我进入项目属性,并将程序集名称和根名称空间更改为项目名称,在此之后,它工作得非常好!

对于那些在 Project-> Properties: target 文件夹中的 Build Events (Pre-Build 事件命令行或/和 Post-Build 事件命令行)中使用“ copy”命令的用户,应该存在

我有一个类似的问题,但特别是在 Jenkins 构建环境中。为了解决这个问题,我从在 post build 事件中使用 copy 命令切换到使用 copy 目标。

我改了这个:

   <PropertyGroup>
<PostBuildEvent>copy $(ProjectDir)bin\BLAH.Common.xml $(ProjectDir)App_Data\BLAH.Common.xml</PostBuildEvent>
</PropertyGroup>

回到这里:

  <Target Name="AfterBuild">
<Copy SourceFiles="$(ProjectDir)bin\BLAH.Common.xml" DestinationFolder="$(ProjectDir)App_Data\" />
</Target>

and it works fine now.

我得到的具体错误是:

(PostBuildEvent target) ->
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(4291,5): error MSB3073: The command "copy <http://1.2.3.4/job/BLAHv2/ws/Api/bin/BLAH.Common.xml> <http://1.2.3.4/job/BLAHv2/ws/Api/App_Data/BLAH.Common.xml"> exited with code 1. [<http://1.2.3.4/job/BLAHv2/ws/Api/Api.csproj]>

还有一个答案。

在我的案例中,我有一个针对这两者的 VisualStudio2017项目。净标准1.3及。Net Framework 2.0.属性中指定。Csproj 文件如下:

<TargetFrameworks>netstandard1.3;net20</TargetFrameworks>

I also had a post-build event command line like this:

copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"

换句话说,我试图将构建生成的.NetFramework.dll 复制到另一个位置。

当我执行重建时,这个错误失败了:

MSB3073 The command "copy "E:\Yacks\YacksCore\YacksCore\bin\net20\Merlinia.YacksCore.dll" "E:\Merlinia\Trunk-Debug\Shared Bin\"" exited with code 1.

在经历了许多挫折之后,我终于确定了正在发生的事情是: Rebuild 删除了所有的输出文件,然后为。然后尝试运行生成后事件命令行,但是失败了,因为要复制的文件还没有生成。

所以解决方案是改变构建的顺序,也就是说,为。首先是 Net Framework 2.0,然后是 for。净标准1.3。

<TargetFrameworks>net20;netstandard1.3</TargetFrameworks>

现在可以工作了,只是有一个小问题,即生成后事件命令行运行了两次,因此文件被复制了两次。

在我的例子中,我必须在调用 bat 文件之前更改 cd(目录) ,因为 bat 文件内部有一个指定相对路径的复制操作。

:: Copy file
cd "$(ProjectDir)files\build_scripts\"
call "copy.bat"

对我来说,原因是构建在构建输出文件夹(x86)上创建了一个平台文件夹,而修复的方法是将解决方案平台从“混合平台”更改为“任意 CPU” 在 VS

VS 2019