以编程方式更改项目设置

Posted

技术标签:

【中文标题】以编程方式更改项目设置【英文标题】:programmatically alter project settings 【发布时间】:2017-10-05 12:25:11 【问题描述】:

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

无法打开文件 mfc140d.lib

打开项目属性,将平台工具集改为VS2017 141,语言版本改为C++17即可修复。 但是为 120 个项目执行此操作需要很长时间,然后发布版本也是如此。我可以以编程方式更改项目文件中的哪些设置以设置这两个选项?我肯定找不到他们

【问题讨论】:

如果选择“所有配置”只需要点击120次,而不是“发布”和“调试”分别进行。否则,对一个项目进行更改,查看 .vcxproj 文件中的更改内容,然后使用您喜欢的文本编辑器进行查找/替换。 这里的关键是我认为它是 .vcproj 文件而不是 .vcxproj 文件,该死的 使用property pages。或者,切换到可编程构建系统,如 CMake。每个人都讨厌它(包括我在内),但没有其他方法可以管理复杂的构建系统。或者,稍微解释一下 Stroustrup:只有两种类型的构建系统:一种是人人都在抱怨的,另一种是没人使用的。 【参考方案1】:

编写了一个 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()

【讨论】:

以上是关于以编程方式更改项目设置的主要内容,如果未能解决你的问题,请参考以下文章

以编程方式更改 tabBar 项目?

在 viewDidLoad() 中以编程方式更改标签栏项目标题

如何以编程方式更改 XCode 项目的设备目标?

如何以编程方式更改标签栏项目使用的默认图标?

如果sitecore中的先前版本没有更改,如何以编程方式删除新创建的项目版本

是否可以在Spritekit项目中以编程方式更改纹理色调?