2017-07-05 13 views
2

Q1:我想問一下,如果有一種方法來添加構建配置以編程C#的解決方案?添加構建配置編程了的.sln

我能讀.sln文件,並獲得其配置感謝this question

可悲的是ProjectCollection.GlobalProjectCollection是一種只有一個getter的。我可以閱讀並獲取所有類型的屬性,但它缺少一個功能。


我知道一個.sln文件是一個普通文件(它是可以直接寫入到它,但我會信任的本地API更多):

{97C119BD,E435-490C -B955-06EA0AD3C08A}的.debug |不限CPU.ActiveCfg =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}的.debug |不限CPU.Build.0 =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}。新調試|不限CPU.ActiveCfg =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}。新調試|不限CPU.Build 0.0 =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A}。新調試|不限CPU.Deploy.0 =調試|任何CPU

{97C119BD-E435- 490C-B955-06EA0AD3C08A} .Observe調試|不限CPU.ActiveCfg =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A} .Observe調試|不限CPU.Build.0 =調試|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A} .Release |不限CPU.ActiveCfg =釋放|任何CPU

{97C119BD-E435-490C-B955-06EA0AD3C08A} .Release |不限CPU.Build.0 =發行|任何CPU


Q2:爲什麼有3行配置語句爲New Debug

任何CPU.Deploy.0存在,即使我的解決方案有3

回答

0

後,這項任務相當長一段時間,我能夠自動添加構建配置用我的解決方案中的對單個項目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(); 
}