&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
'programing' 카테고리의 다른 글
| 안드로이드 개발용 MS Visual Studio를 어떻게 사용할 수 있습니까? (0) | 2023.08.11 |
|---|---|
| 'Install-Module' 용어가 cmdlet의 이름으로 인식되지 않습니다. (0) | 2023.08.11 |
| jQuery: 특정 ID를 제외한 지정된 클래스의 모든 요소 선택 (0) | 2023.08.06 |
| 역할 ASP에 사용자 추가.NET 아이덴티티 (0) | 2023.08.06 |
| CSS 그리드 래핑 (0) | 2023.08.06 |