Visual studio 以编程方式更改项目设置

Visual studio 以编程方式更改项目设置,visual-studio,mfc,Visual Studio,Mfc,我有一个旧的MFC解决方案,其中有120个项目。 现在我试图用VisualC 2017编译它,但每个项目都会发出错误: 无法打开文件mfc140d.lib 打开项目属性,将平台工具集更改为VS2017 141,并将语言版本更改为C++17将其修复。 但是,对于120个项目来说,这样做需要很长时间,对于发布构建来说也是如此。我可以通过编程更改项目文件中的哪些设置来设置这两个选项?我肯定找不到他们编写了一个python脚本,如果不存在,它会将stdcpp17和v141添加到vcxproj文件中。也许

我有一个旧的MFC解决方案,其中有120个项目。 现在我试图用VisualC 2017编译它,但每个项目都会发出错误:

无法打开文件mfc140d.lib

打开项目属性,将平台工具集更改为VS2017 141,并将语言版本更改为C++17将其修复。
但是,对于120个项目来说,这样做需要很长时间,对于发布构建来说也是如此。我可以通过编程更改项目文件中的哪些设置来设置这两个选项?我肯定找不到他们

编写了一个python脚本,如果不存在,它会将stdcpp17和v141添加到vcxproj文件中。也许有人会利用它:

def get_all_files(basedir):
    for root, subfolders, files in os.walk(basedir):
        for file in os.listdir(root):
            yield root, file

def all_lines_from_file(file):
    with open(file, 'r') as fd:
        for line in fd.readlines():
            yield line

def update_VCXPROJ():
    standard = '<LanguageStandard>stdcpp17</LanguageStandard>'
    toolset = '<PlatformToolset>v141</PlatformToolset>'
    add1 = '<CharacterSet>MultiByte</CharacterSet>'
    add2 = '<DebugInformationFormat>'

    for root, file in get_all_files('c:/projects/6thcycle/sources/'):
        if not file.lower().endswith('.vcxproj'):
            continue

        thisfile = ''
        for line in all_lines_from_file('{0}/{1}'.format(root, file)):
            if toolset in line or standard in line:
                continue

            if add1 in line:
                line += '    {0}\n'.format(toolset)
            elif add2 in line:
                line += '      {0}\n'.format(standard)

            thisfile += line

        with open('{0}/{1}'.format(root, file), 'w') as fd:
            fd.write(thisfile)    

update_VCXPROJ()
def get_all_文件(basedir):
对于os.walk(basedir)中的根目录、子文件夹和文件:
对于os.listdir(根目录)中的文件:
产生根、文件
从_文件(文件)中定义所有_行:
以fd形式打开(文件“r”):
对于fd.readlines()中的行:
生产线
def update_VCXPROJ():
标准='stdcpp17'
工具集='v141'
add1='多字节'
add2=“”
对于root,在get_all_files('c:/projects/6thcycle/sources/')中创建文件:
如果不是file.lower().endswith('.vcxproj'):
持续
此文件=“”
对于来自_文件({0}/{1}.)的所有_行中的行,格式(根,文件)):
如果工具集在线或标准在线:
持续
如果在行中添加1:
行+='{0}\n'.格式(工具集)
elif add2中的行:
行+='{0}\n'。格式(标准)
此文件+=行
将open({0}/{1}.format(root,file),'w')作为fd:
写入(这个文件)
更新VCXPROJ()

如果选择“所有配置”,而不是单独选择“发布”和“调试”,则只需单击120次即可。否则,对一个项目进行更改,查看.vcxproj文件中的更改内容,然后使用您最喜欢的文本编辑器进行查找/替换。这里的关键是我假设它是.vcproj文件,而不是.vcxproj文件,damnUse。或者,切换到可编程构建系统,如CMake。每个人都讨厌它(这也包括我),但是没有其他方法来管理复杂的构建系统。或者,稍微解释一下Stroustrup:只有两种类型的构建系统:每个人都抱怨的构建系统和没有人使用的构建系统。