MSbuild 不展开环境变量
MSbuild doesn't expand environment variables
我正在使用 MSBuild 从命令行构建解决方案文件。其中,vcxproj 文件的路径由环境变量 FOO 指定 %FOO%\ProjName.vcxproj
当我在 IDE 中打开 sln 时,我找到并加载了项目。当我从命令行(在同一台机器上)使用 msbuild 时,出现以下错误:
The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found,
在同一个命令提示符下
echo %FOO%
给我正确展开的路径。
来自评论;这是一个已知的错误和来自 MS 的 wontfix。我最终编写了一个批处理文件来复制 sln 文件并扩展环境变量,构建它,然后删除新的 sln。工作正常。
如@maccard 所述,这是一个已知错误。 (见 https://developercommunity.visualstudio.com/content/problem/248631/msbuild-doesnt-parse-environment-variables-in-sln.html and 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('\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])
我正在使用 MSBuild 从命令行构建解决方案文件。其中,vcxproj 文件的路径由环境变量 FOO 指定 %FOO%\ProjName.vcxproj
当我在 IDE 中打开 sln 时,我找到并加载了项目。当我从命令行(在同一台机器上)使用 msbuild 时,出现以下错误:
The Project File "C:\Blah\Blah\%FOO%\ProjName.vcxproj" was not found,
在同一个命令提示符下
echo %FOO%
给我正确展开的路径。
来自评论;这是一个已知的错误和来自 MS 的 wontfix。我最终编写了一个批处理文件来复制 sln 文件并扩展环境变量,构建它,然后删除新的 sln。工作正常。
如@maccard 所述,这是一个已知错误。 (见 https://developercommunity.visualstudio.com/content/problem/248631/msbuild-doesnt-parse-environment-variables-in-sln.html and 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('\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])