【发布时间】:2018-12-11 07:55:39
【问题描述】:
团队,
我有一个 powershell 脚本,它调用 MSBUILD.exe 在 Azure devops Build 管道中运行构建以打包它。当前脚本使用 vs12。我在运行 vs 12 时遇到了以下错误。
错误 MSB4019:导入的项目“C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" 没找到。确认声明中的路径是 正确,并且该文件存在于磁盘上。
因此,根据我的一位同事的建议,我不得不将其从 vs 12 更改为 vs 15,并将以下路径硬编码为 MSBUILD。
C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\
并且构建运行良好。所以现在,我想在我的 powershell 脚本中为这个路径使用 ENV,以便它动态地选择它。
下面是运行 MS build 的函数。
Function Get-MSBuild {
$lib = [System.Runtime.InteropServices.RuntimeEnvironment]
$rtd = $lib::GetRuntimeDirectory()
Join-Path $rtd msbuild.exe}
上面的代码在我的代理上失败,我遇到文件存在磁盘错误。我用 msbuild 路径替换了 $lib。如下。
Function Get-MSBuild {
$lib = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\"
Join-Path $lib msbuild.exe
}
上面的代码工作正常,但我想使用 env 或一些预定义的环境变量动态生成路径。
现在,我的问题是是否有预定义的环境变量来动态获取路径
"C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\"
提前感谢您的帮助。
【问题讨论】:
-
我不熟悉 PowerShell 以及它如何扩展变量,但它可能会被路径中的空格弄糊涂。在上面的例子中是
$libC:\...\Bin还是"C:\...\Bin"(带引号)?也许试试Join-Path "$lib" msbuild.exe? -
嗨丹尼尔,感谢您的回复,当前代码在对 MSBUILD 路径进行硬编码后工作正常,但是想知道 powershell 中是否有变量或类可以用来了解当前路径MSBUILD.exe
标签: azure-devops visual-studio-2017-build-tools