0

我有如下的 msbuild 命令

my $cmd = "msbuild /v:n /target:clean;publish /p:Configuration=".$buildConfig." \"".$solutionPath."\" /p:OutputPath=" ."\"$outputdir\" /p:SolutionDir="."\"$sourceDir\\";

在编译时,这是对我来说看起来不错的确切命令。我不确定为什么在行尾有一个 " 缺失。

msbuild /v:n /target:clean;publish /p:Configuration=Release "D:\Projects\Suite\Verify\Manager\source\Project1\Project1.csproj" /p:OutputPath="D:\Repository\Suite\Project1" /p:SolutionDir="D:\Projects\Suite\Verify\

此外,如果我在命令行中复制确切的文本,它可以正常工作而不会出现任何错误。

但是当我从 perl 脚本运行它时,我收到以下错误

(PostBuildEvent target) -> 
 c:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(3717,9): error MSB3073: The command "copy "D:\Projects\Suite\Verify\ 2>&1\Common\libraries\ABC.NET\ABC9-32.dll" "D:\Projects\Suite\Verify\ 2>&1bin\Release\"" exited with code 1. [D:\Projects\Suite\Verify\Common\source\Plan\Plan.csproj]

" 2>&1"是从某个地方附加的,我不知道如何处理它?

基本上 project1 依赖于 Plan ,它设置了一个 postbuild 事件来复制文件"ABCpdf9-32.dll"。为什么我会收到此错误?什么是解决方案。请帮忙

4

1 回答 1

1

my $cmd ...条线可以简化。而不是连接 (with ) 可能的项目,只需像对and.所做的那样使用插值。整行简化为$outputdir$sourceDir

my $cmd = "msbuild /v:n /target:clean;publish /p:Configuration=$buildConfig \"$solutionPath\" /p:OutputPath=\"$outputdir\" /p:SolutionDir=\"$sourceDir\\";

简化了这一行后,我看到它以 a结尾\\";,这意味着SolutionDir参数有一个左双引号,没有右双引号。尝试将 final 更改\\\"这一行

my $cmd = "msbuild /v:n /target:clean;publish /p:Configuration=$buildConfig \"$solutionPath\" /p:OutputPath=\"$outputdir\" /p:SolutionDir=\"$sourceDir\"";
于 2013-09-23T11:46:48.967 回答