【问题标题】:Add Build Configuration Programmatically for a .sln以编程方式为 .sln 添加构建配置
【发布时间】:2017-09-12 14:47:13
【问题描述】:

Q1:我想问一下是否有办法以编程方式为 C# 解决方案添加构建配置?

感谢this question,我能够读取 .sln 文件并获取其配置。

可悲的是,ProjectCollection.GlobalProjectCollection 只是一种吸气剂。我可以阅读并获取所有类型的属性,但它缺少save 功能。


我知道 .sln 文件是一个常规文件(可以直接写入,但我更相信原生 API):

{97C119BD-E435-490C-B955-06EA0AD3C08A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.Debug|Any CPU.Build.0 = Debug|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.New Debug|Any CPU.ActiveCfg = Debug|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.New Debug|Any CPU.Build.0 = Debug|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.New Debug|Any CPU.Deploy.0 = Debug|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}。观察调试|任何 CPU.ActiveCfg = 调试|任何 CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}。观察调试|任何 CPU.Build.0 = 调试|任何 CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.Release|Any CPU.ActiveCfg = Release|Any CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}.Release|Any CPU.Build.0 = Release|Any CPU


Q2:为什么New Debug有3行配置语句?

任何 CPU.Deploy.0 都存在于单个项目中,即使我的解决方案有 3 个。

【问题讨论】:

    标签: c# visual-studio


    【解决方案1】:

    在完成此任务相当长的一段时间后,我能够使用 VS dll 将构建配置自动添加到我的解决方案中。

    下面是一些示例代码:

    public void CustomSolutionConfiguration()
    {
        var slnFile = Path.Combine(@"C:\Work\Dev\MvcConfigurations", @"MvcConfigurations.sln");
    
        //VisualStudio.DTE.14.0 this hardcoded string is VS version dependent!
        System.Type t = System.Type.GetTypeFromProgID("VisualStudio.DTE.14.0"); 
        object obj = Activator.CreateInstance(t, true);
        var dte = (DTE2)obj;
        Solution sln = dte.Solution;
        sln.Open(slnFile);
        System.Threading.Thread.Sleep(1000);
        //Do stuff with the solution
    
        var projs = sln.Projects;
        var cnfManager = sln.Projects.Item(1).ConfigurationManager;   
    
        var slnCnfgCount = sln.SolutionBuild.SolutionConfigurations.Count;
        for (var tt = 1; tt <= slnCnfgCount; tt++)
        {   
             Console.WriteLine(sln.SolutionBuild.SolutionConfigurations.Item(tt).Name);
             var tmpItem = sln.SolutionBuild.SolutionConfigurations.Item(tt);
             var tmp = sln.SolutionBuild.SolutionConfigurations.Item(tt).SolutionContexts;
             //Do some test printing
             for (var tt2 = 1; tt2 <= tmp.Count; tt2++)
             {
                 var tmp2 = tmp.Item(tt2);
                 Console.Write(tmp2.ConfigurationName + ";  ");
             }
    
             Console.WriteLine();
         }
    
         sln.SaveAs(slnFile);
         Console.ReadLine();
    }
    

    【讨论】:

      猜你喜欢
      • 2023-02-18
      • 2016-11-18
      • 1970-01-01
      • 2011-05-02
      • 2018-06-13
      • 1970-01-01
      • 1970-01-01
      • 2015-02-11
      • 1970-01-01
      相关资源
      最近更新 更多