2008-11-21 89 views
93

退出我有一个后生成事件一个项目:后生成的代码1

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

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

我们同时使用的Visual Studio 2008

+0

,答案蒂姆·斯科特提供接近此页的末尾(所以我忽略了开头)解决我的问题。 – 2016-11-29 06:18:02

回答

102

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

+12

在路径名上加上引号是一种很好的做法。 不能在包含空格的路径中工作更好:-) – Asher 2008-11-21 21:54:22

+0

空间的东西也让我感到很开心。 – 2011-03-15 06:57:08

+4

copy/y“$(TargetDir)Dotfuscated \”“$(TargetDir)”这个命令对我来说不合适,如果我在结尾处写入出口0,则工作正常。你能告诉我为什么吗? – 2012-10-22 03:12:41

2

是良好实践的问题,我建议你用MS Build File Copy task更换后生成盛会。

+1

一个比另一个有什么好处? – GregC 2013-03-15 14:32:24

52

的一个与执行“Ping”帮我...但可以解释更好一点......

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

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

这样:

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

希望它适合你。 :-)

+2

+1感谢发布代码! – Dragn1821 2011-10-07 14:57:58

+0

+1这很好 – David 2013-01-29 13:50:34

41

我的代码1的原因是目标文件夹是只读的。希望这可以帮助别人! 我有一个后期构建事件来从一个目录复制到另一个目标是只读。所以我只是去取消选中目录及其所有子目录中的只读属性!只要确保它是一个安全的目录!

2

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

6

我不得不跑VS以管理员身份让我生成后拷贝保护的OS“.. \ Common7 \ IDE \ PrivateAssemblies”工作

35

我加入这为今后的游客,因为这是相当一个积极的问题。

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。你会注意到这一点,并将它评论出来,而不是有一个悬挂的版本。

2

我刚刚收到同样的错误。我曾在目的地路径是%需要进行转义

c:\projects\%NotAnEnvironmentVariable% 

需要的是

c:\projects\%%NotAnEnvironmentVariable%% 
5

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

0

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

就我而言,我不得不保存非Unicode(西,Windows)中编码的bat文件。默认情况下,当我将文件添加到Visual Studio(并且可能我应该在VS之外完成它)时,它会添加UTF-8编码。

2

我能够通过以管理员身份运行Visual Studio来修复我的代码1。很明显,它没有权限在没有Admin的情况下执行shell命令。

2

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

0

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

1

对于那些,谁从项目生成事件(预生成事件命令行或/和生成后事件命令行)使用“复制”命令 - >属性:目标文件夹应该存在

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]> 
在我的情况