【问题标题】:MSBUILD.EXE environment variableMSBUILD.EXE 环境变量
【发布时间】: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


【解决方案1】:

我能够直接在我的代码中调用 MSBUILD.exe,并且代理上存在 env 变量。

【讨论】:

    猜你喜欢
    • 2014-09-30
    • 2020-12-07
    • 1970-01-01
    • 2014-12-17
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多