programing

&operator를 사용하여 PowerShell에서 MSBuild를 호출하는 방법은 무엇입니까?

elecom 2023. 8. 6. 09:51
반응형

&operator를 사용하여 PowerShell에서 MSBuild를 호출하는 방법은 무엇입니까?

방금 PowerShell v1.0에서 테스트했습니다.설정은 다음과 같습니다.

 Id CommandLine
 -- -----------
  1 $msbuild = "C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe"
  4 $a = "C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build"

.

이 줄은 다음과 같은 직관적이지 않은 오류 메시지와 함께 실패합니다.

 Id CommandLine
 -- -----------
  5 & $msbuild $a

.

&은 첫 번째 인수가 명령 자체일 것으로 예상하기 때문에 이 행은 실패합니다.

 Id CommandLine
 -- -----------
 10 & "$msbuild $a"

.

이 라인은 작동합니다.

 Id CommandLine
 -- -----------
 16 cmd /c "$msbuild $a"

.

설명해 주세요.MSBuild 관련 해결 방법보다 & 구문이 작동하지 않는 이유에 더 관심이 있습니다.

에휴.

$collectionOfArgs = @("C:\some\project\or\other\src\Solution.sln", 
    "/target:Clean", "/target:Build")
& $msbuild $collectionOfArgs

효과가 있습니다.에서는 인수 모음을 사용하므로 여러 인수를 포함하는 문자열을 문자열 인수 모음으로 분할해야 합니다.

PowerShell 구문 분석 인수의 결과로 표시되는 문제입니다.첫 번째 예제에서는 PowerShell이 $a를 확인하면 단일 매개 변수 msbuild로 전달합니다.PSCX:의 echoargs 유틸리티를 사용하여 이를 확인할 수 있습니다.

PS> $a = "C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build"
PS> & echoargs $a
Arg 0 is <C:\some\project\or\other\src\Solution.sln /target:Clean /target:Build>

두 번째 예는 "$echoargs $a"를 명령 이름으로 호출하도록 powershell에 지시하고 있으며 올바른 명령 이름이 아니기 때문에 더욱 심각합니다.

세 번째 줄은 CMD.exe가 "$echoargs $a"의 확장 형식을 단일 인수로 가져와 구문 분석하고 실행하기 때문에 작동합니다.

여기에는 몇 가지 옵션이 있습니다.처음에는 다음과 같이 했습니다.

PS> & $msbuild C:\some\project\or\other\src\Solution.sln `
    /target:Clean /target:Build

다른 옵션은 다음과 같이 Invoke-Expression을 사용하는 것입니다.

PS> Invoke-Expression "$msbuild $a"

일반적으로 저는 특히 호출되는 문자열의 일부가 사용자에 의해 제공되는 경우 Invoke-Expression에 매우 주의하려고 합니다.

무료 Invoke-MsBuild powershell 스크립트/모듈을 사용할 수도 있습니다.이렇게 하면 기본적으로 msbuild를 호출하는 대신 호출할 수 있는 Invoke-MsBuild PowerShell cmdlet이 제공됩니다.직접 exe를 수동으로 실행합니다.

그것은 저에게 잘 맞습니다.

PS> cmd.exe /c 'C:\Windows\Microsoft.NET\Framework\v3.5\msbuild.exe' /target:Clean /target:Build 'C:\some\project\or\other\src\Solution.sln'

언급URL : https://stackoverflow.com/questions/869278/how-to-invoke-msbuild-from-powershell-using-operator

반응형