Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MSbuild不';t扩展环境变量_Msbuild - Fatal编程技术网

MSbuild不';t扩展环境变量

MSbuild不';t扩展环境变量,msbuild,Msbuild,我正在使用MSBuild从命令行生成解决方案文件。在其中,vcxproj文件的路径由环境变量FOO由%FOO%\ProjName.vcxproj指定 当我在IDE中打开sln时,我发现并加载了项目。从命令行(在同一台计算机上)使用msbuild时,出现以下错误: The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found, 在同一命令提示符下 echo %FOO% 提供正确展开的路径。来自注释;这是一个已知的b

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

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

The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found,
在同一命令提示符下

echo %FOO%  

提供正确展开的路径。

来自注释;这是一个已知的bug和一个来自MS的wontfix。我最终编写了一个批处理文件来复制sln文件并扩展环境变量,构建该文件,然后删除新的sln。很好

正如@maccard所说,这是一个已知的bug。(见和)

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


基于(和我自己的实现),MSBuild在项目文件中使用$(Foo)语法,而SLN文件使用%Foo%see edited comment:]标记为wontfix,太好了。也没有解释你如何解决这个问题。我想我最终会复制sln文件,用路径替换%FOO%,然后再次将其写出来。哎哟,真是小菜一碟。我想我们必须等到他们(最终)也制作了解决方案msbuild文件。据我所知,它肯定在路线图上。你愿意分享你写的批处理代码吗?
# 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])