MSbuild无法扩展环境变量。

3
我正在使用MSBuild从命令行构建解决方案文件。其中,vcxproj文件的路径由环境变量FOO指定为%FOO%\ProjName.vcxproj。
当我在IDE中打开sln时,项目被找到并加载。但是,当我在命令行上使用msbuild(在同一台机器上)时,出现以下错误:
The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found,

在同一个命令提示符窗口中

echo %FOO%  

给我正确的扩展路径。

1
http://connect.microsoft.com/VisualStudio/feedback/details/690318/msbuild-doesnt-parse-environment-variables-in-sln-files - stijn
基于这里(和我自己的实现),MSBuild在项目文件中使用$(Foo)语法,但SLN文件使用%FOO%。 - maccard
1
see edited comment :] - stijn
标记为“不修复”,好吧。也没有说明如何解决它的方法。我猜我最终会复制sln文件,用路径替换%FOO%,然后再写回去。呃。 - maccard
1
确实很遗憾。我猜我们得等到他们(终于)也制作出解决方案msbuild文件。据我所知,这肯定在路线图上。 - stijn
由于connect.microsoft.com站点已不再使用,我已经在https://developercommunity.visualstudio.com/content/problem/248631/msbuild-doesnt-parse-environment-variables-in-sln.html上开了一个新的错误报告。 - cowlinator
2个回答

1

从评论中得知,这是一个已知的错误,并且微软不会修复。我最终编写了一个批处理文件来复制sln文件并展开环境变量,构建它,然后删除新的sln。运行良好。


你愿意分享一下你写的批处理代码吗? - ViRuSTriNiTy

0

正如@maccard所述,这是一个已知的bug。(请参见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])

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接