2017-10-07 9 views
0

MSBuild으로 번역 된 GNU makefile이 있습니다.msbuild - sed 명령 오류 - 작은 따옴표와 큰 따옴표 포함 방법

<Target Name="prebuild_cat"> 
    <Exec 
     EchoOff="true" 
     StandardOutputImportance="low" 
     StandardErrorImportance="low" 
     IgnoreExitCode="true" 
     ConsoleToMSBuild="true" 
     Command=' $(GnuSed) 's/^Q(.*)/"&"/'  
    '> 
    </Exec> 
</Target> 
: Exec 작업의 Command 속성을 닫습니다 해야하는 작은 따옴표를 방해 그것이 ' (작은 따옴표)를 포함하고 있기 때문에 MSBuild에서 실행되지 않습니다 sed를 포함하는 명령이 있습니다

실행하면 Visual Studio에서

오류 MSB4025 : 프로젝트 파일을로드 할 수 없습니다. 's'는 예기치 않은 토큰입니다. 기대되는 공백. 내가 &quot;

<Target Name="prebuild_cat"> 
    <Exec 
     EchoOff="true" 
     StandardOutputImportance="low" 
     StandardErrorImportance="low" 
     IgnoreExitCode="true" 
     ConsoleToMSBuild="true" 
     Command=' $(GnuSed) &apos;s/^Q(.*)/&quot;&&quot;/&apos;  
    '> 
    </Exec> 
</Target> 

오류 MSB4025와 &apos;"'을 대체 라인 (244), 위치 (25)

: 프로젝트 파일을로드 할 수 없습니다. EntityName을 구문 분석하는 중 오류가 발생했습니다.

+0

이 문제점에 대한 업데이트는 있습니까? 이 문제를 해결 했습니까? 그렇지 않은 경우이 문제에 대한 최신 상태를 알려 주시기 바랍니다. –

+0

@ Leo-MSFT 나는 대답을 선택했다 : 나의 문제는'&'을'&' – Adrian

답변

1

은 MSBuild - 나오지도 명령 오류 - 문서 MSBuild Special Characters에 따르면 작은 따옴표와 큰 따옴표

를 포함하는 방법 :

MSBuild에서 특정 상황에서 특별한 사용을 위해 일부 문자를가집니다 . 이러한 문자를 예약 된 컨텍스트에서 문자 그대로 사용하려는 경우에만 이러한 문자를 이스케이프해야합니다.

특수 문자를 탈출하기 위해, xx는 문자의 ASCII 16 진수 값을 나타내는 구문 %의 XX를 사용합니다.

이 경우 작은 따옴표는 ASCII 문자 39이며 16 진수는 27입니다. 그리고 &의 값은 26이므로 올바른 이스케이프 시퀀스는 다음과 같습니다

다음
'$(GnuSed) %27s/^Q(.*)/"%26"/%27' 

내 테스트 샘플입니다, 당신은 확인하실 수 있습니다 당신을 위해 작동하는 경우 :

<Target Name="prebuild_cat" AfterTargets="Build"> 
    <Message Text='$(GnuSed) %27s/^Q(.*)/"%26"/%27' Importance='high' /> 
    </Target> 

출력 창에 결과 :

1>prebuild_cat: 
1> 's/^Q(.*)/"&"/' 
1> 
1>Build succeeded. 
+0

으로 바꾸는 것을 잊었다는 것이었다. 또한 &''"'''' – Adrian