【问题标题】:Is it possible to read MSBuild macros of C/C++ project programatically outside of Visual Studio?是否可以在 Visual Studio 之外以编程方式读取 C/C++ 项目的 MSBuild 宏?
【发布时间】:2021-08-02 04:48:17
【问题描述】:

我正在尝试对 Visual Studio 2017 项目 (.vcxproj) 进行大规模编辑。此编辑有条件地取决于某些项目属性。可悲的是,它比使用共享的.props 文件更复杂。

我可以重新实现获得所需宏所需的函数,例如$(TargetExt)。但我想知道是否有一些 Microsoft 构建工具可以将所需的宏打印到标准输出,以便我可以这样做:

getMacroValue.exe -project MyProject.vcxproj -value TargetExt

有没有类似的东西,或者一些会导致相同结果的黑客/技巧?如果可行,我不介意肮脏的解决方案,我正在做的是一次性的事情,但是有 50 多个项目要编辑,每次编辑需要 5 分钟,因此编写脚本是值得的。

【问题讨论】:

    标签: visual-studio msbuild visual-studio-2017


    【解决方案1】:

    也许这个示例(C# 控制台应用程序)可以帮助您从 proj 文件中读取属性值。

    static void Main(string[] args)
    {
        if (args.Length < 2)
        {
            return;
        }
    
        string path = args[0];
        string macro = args[1];
    
        ProjectCollection collection = new ProjectCollection();
        Project project = new Project(path, null, null, collection, ProjectLoadSettings.IgnoreMissingImports);
    
        string val = project.GetPropertyValue(macro);
        Console.WriteLine(val);
    
        Console.ReadLine();
    }
    

    【讨论】:

    • 问题是 MSVC 项目是各种包含项目、条件属性等的巨大可憎。许多项目属性也是隐式设置的,即使它们在任何 XML 文件中都看不到。我可以解析 XML,并且我确实通过这种方式解析了项目文件中的一些内容,但是还不够。
    • 经过我的研究,恐怕你做不到。我找到了一个名为:Microsoft.Build.Evaluation 的库,它也可以读取 vcxproj 文件。但它仍然有一些限制。如: 1. 无法读取有条件的属性组。 2.可以读取props文件但需要在vcxproj文件中显式导入
    猜你喜欢
    • 1970-01-01
    • 2016-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-05-09
    相关资源
    最近更新 更多