【问题标题】:MSbuild doesn't expand environment variablesMSbuild 不扩展环境变量
【发布时间】:2018-06-16 07:36:59
【问题描述】:

我正在使用 MSBuild 从命令行构建解决方案文件。其中,vcxproj 文件的路径由 %FOO%\ProjName.vcxproj 的环境变量 FOO 指定

当我在 IDE 中打开 sln 时,我找到并加载了项目。当我从命令行(在同一台机器上)使用 msbuild 时,出现以下错误:

The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found,

在同一命令提示符下

echo %FOO%  

给我正确展开的路径。

【问题讨论】:

  • 基于this(和我自己的实现)MSBuild 在项目文件中使用 $(Foo) 语法,而 SLN 文件使用 %FOO%
  • 查看编辑评论:]
  • 标记为 wontfix,太好了。也没有解释如何解决它。猜猜我最终会复制 sln 文件,将 %FOO% 替换为路径,然后再次将其写回。嘘。
  • 确实有点可惜。猜猜我们必须等到他们(最终)也制作解决方案 msbuild 文件。据我所知,它肯定在路线图上。

标签: msbuild


【解决方案1】:

来自 cmets;这是一个已知的错误和 MS 的修复程序。我最终编写了一个批处理文件来复制 sln 文件并扩展环境变量,构建它并删除新的 sln。工作正常。

【讨论】:

  • 您愿意分享您编写的批处理代码吗?
【解决方案2】:

正如@maccard 所说,这是一个已知的错误。 (见https://developercommunity.visualstudio.com/content/problem/248631/msbuild-doesnt-parse-environment-variables-in-sln.htmlhttps://github.com/Microsoft/msbuild/issues/120

您可以使用以下脚本将 .sln 文件中的所有环境变量替换为其值。 (脚本只经过非常轻微的测试)。

# Python 2.7
# usage: python fix_sln.py path/to/file.sln


import codecs
import os
import re
import shutil
import sys

if __name__ == "__main__":
    with codecs.open(sys.argv[1], encoding='utf-8-sig') as orig:
        with codecs.open(sys.argv[1] + '.modified', 'w', encoding='utf-8-sig') as new:
            for line in orig:
                line = line.rstrip('\r\n')
                found = re.search(r"""%.+%""", line)
                line = line.replace(str(found.group()), os.environ.get(str(found.group()).replace("""%""", ""))) if found else line
                new.write(line + '\r\n')
    shutil.move(sys.argv[1] + '.modified', sys.argv[1])

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-07-23
    • 2015-03-19
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 2023-03-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多