C# 以编程方式读取生成配置

C# 以编程方式读取生成配置,c#,visual-studio,msbuild,C#,Visual Studio,Msbuild,我希望能够以编程方式读取VS构建配置。这是因为我想创建自己的生成器 我该怎么做?有人有代码示例吗 我的意思是,如果我有调试、开发和发布,我希望它们列在表单应用程序的列表框中。我尝试过使用“EnvDTE.dll”类,但我不确定它是否是我想要的。如果有人有一个具体的示例或示例链接,我将不胜感激。您可以使用msbuild API。在Visual Studio 2015中,Microsoft.Build.dll中有一个名为Microsoft.Build.Construction.SolutionFile

我希望能够以编程方式读取VS构建配置。这是因为我想创建自己的生成器

我该怎么做?有人有代码示例吗


我的意思是,如果我有调试、开发和发布,我希望它们列在表单应用程序的列表框中。我尝试过使用“EnvDTE.dll”类,但我不确定它是否是我想要的。如果有人有一个具体的示例或示例链接,我将不胜感激。

您可以使用msbuild API。在Visual Studio 2015中,Microsoft.Build.dll中有一个名为Microsoft.Build.Construction.SolutionFile的类,该类随VS2015一起提供,可用于加载解决方案

在VS2013中不存在这种情况,但您可以执行以下操作: (参考Microsoft.Build.dll、Microsoft.Build.Engine.dll、Microsoft.Build.Framework.dll)


ConditionedProperties包含解决方案中包含的平台和配置列表。您可以使用它来填充表单。

在文本编辑器中打开.sln并查找您的配置;您将能够很快了解VS是如何工作的。中有很多示例。我成功地使用它来进行大型C++解决方案重构,但没有尝试C项目。另一种可能是使用命名空间中的类。但不确定它是否可以在解决方案级别工作
class Program
{
    static void Main(string[] args)
    {
        string nameOfSolutionForThisProject = @"MySolutionFile.sln";
        string wrapperContent = SolutionWrapperProject.Generate(nameOfSolutionForThisProject, toolsVersionOverride: null, projectBuildEventContext: null);
        byte[] rawWrapperContent = Encoding.Unicode.GetBytes(wrapperContent.ToCharArray());
        using (MemoryStream memStream = new MemoryStream(rawWrapperContent))
        using (XmlTextReader xmlReader = new XmlTextReader(memStream))
        {
            Project proj = ProjectCollection.GlobalProjectCollection.LoadProject(xmlReader);
            foreach (var p in proj.ConditionedProperties)
            {
                Console.WriteLine(p.Key);
                Console.WriteLine(string.Join(", ", p.Value));
            }
        }

        Console.ReadLine();
    }
}