Post Build退出代码1

时间:2008-11-21 20:41:54

标签: visual-studio-2008 post-build

我有一个包含构建后事件的项目:

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

每次在我的机器上都能正常工作。我有一个新的开发人员总是得到“退出代码1”错误。我让她在DOS提示符下运行相同的命令,它工作正常。可能是什么导致了这个?有没有办法解决真正的错误?

我们都在使用Visual Studio 2008。

19 个答案:

答案 0 :(得分:110)

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

答案 1 :(得分:57)

带有“Pings”的人帮助了我......但可能会更好一点解释......

对我而言,解决方案是改变:

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

到此:

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

希望它适合你。 : - )

答案 2 :(得分:44)

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

答案 3 :(得分:41)

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

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.

所以我通过将其添加到批处理文件的底部

轻松解决了这个问题
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之类的内容。您会注意到这一点并将其注释掉,而不是悬挂构建。

答案 4 :(得分:11)

获取process monitor from SysInternals 将其设置为观察Lunaverse.DbVerse(在Path字段中)查看操作结果。 从那里出现什么问题应该很明显

答案 5 :(得分:7)

我必须以管理员身份运行VS才能将我的构建后副本发送到受操作系统保护的“.. \ Common7 \ IDE \ PrivateAssemblies”才能工作

答案 6 :(得分:5)

对于那些在构建事件中使用“复制”命令的人(预构建事件命令行或/和发布-build事件命令行)来自项目 - >属性:您的复制'命令参数应如下所示:copy "source of files" "destination for files"。请记住使用引号(以避免地址字符串中的空格出现问题)。

答案 7 :(得分:3)

我能够通过运行Visual Studio作为管理员来修复我的代码1。显然,没有管理员,它无权执行shell命令。

答案 8 :(得分:3)

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

我改变了这个:

   <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>

现在工作正常。

我得到的具体错误是:

(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]>

答案 9 :(得分:2)

对我来说,我必须确保我正在复制文件的程序当时没有运行。语法中没有任何错误。希望这有助于某人。

答案 10 :(得分:2)

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

c:\projects\%NotAnEnvironmentVariable%

需要

c:\projects\%%NotAnEnvironmentVariable%%

答案 11 :(得分:2)

作为一种良好做法,我建议您使用MS Build File Copy task替换post build事件。

答案 12 :(得分:2)

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

答案 13 :(得分:2)

对于那些在Project中使用'copy'命令(预构建事件命令行或/和构建后事件命令行)的人 - &gt;属性:目标文件夹应该存在

答案 14 :(得分:0)

这么多解决方案......

在我的情况下,我必须使用非unicode(Western,Windows)编码保存bat文件。默认情况下,当我将文件添加到visual studio时(可能我应该在VS之外完成),它添加了UTF-8编码。

答案 15 :(得分:0)

我遇到了同样的问题,事实证明这是因为我重命名了这个项目。我进入项目属性并将程序集名称和根名称空间更改为项目名称,之后它运行良好!

答案 16 :(得分:0)

又一个答案......

就我而言,我有一个针对.Net Standard 1.3和.Net Framework 2.0的Visual Studio 2017项目。这在.csproj文件中指定如下:

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

我还有一个这样的post-build事件命令行:

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

换句话说,我试图将构建生成的.Net Framework .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 Standard 1.3进行了构建,然后尝试运行post-build事件命令行,因为文件失败了被复制还没有建成。

所以解决方案是改变构建的顺序,即首先构建.Net Framework 2.0,然后构建.Net Standard 1.3。

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

现在可以正常工作,有一个小故障,即后期构建事件命令行正在运行两次,因此文件被复制两次。

答案 17 :(得分:0)

就我而言,在调用bat文件之前,我必须cd(更改目录),因为在bat文件中是一个复制操作,指定了相对路径。

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

答案 18 :(得分:0)

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

VS 2019