MSbuild 不扩展环境变量



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

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

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

在同一命令提示符下

echo %FOO%  

为我提供了正确扩展的路径。

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

正如@maccard所说,这是一个已知的错误。 (请参阅 https://developercommunity.visualstudio.com/content/problem/248631/msbuild-不-parse-environment-variables-in-sln.html 和 https://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('rn')
                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 + 'rn')
    shutil.move(sys.argv[1] + '.modified', sys.argv[1])

最新更新