2015-01-17 7 views
6

Bu belge eklenmelidir.Roslyn AddDocument bir projeye ve bu değişikliği gerçek çözüm dosyasına kaydet

public static void AddDoc() 
    { 
     var msBuild = MSBuildWorkspace.Create(); 

     var sln = msBuild.OpenSolutionAsync 
      (@"D:\PanNiebieski\Documents\Visual Studio 14\Projects\WebApplication1" 
      + @"\WebApplication1.sln").Result; 

     foreach (var p in sln.Projects) 
     { 
      p.AddDocument(Guid.NewGuid().ToString() + ".txt", "test"); 

      var ok = msBuild.TryApplyChanges(sln); 

      Console.WriteLine(p.Name + ":" + ok); 
     } 

     Console.ReadKey(); 
    } 

"TryApplyChanges" yöntemi, belgenin eklendiği anlamına göre doğru döner. Çözümü kontrol ettiğimde tekrar böyle bir şey yok. Bir projeye referans eklemeyle aynı problemim var.

Gerçek bir projeye belge eklemek gibi değişiklikleri nasıl kaydedebileceğim sorusudur. Bir şey özlüyor muyum? Bir projeye referans eklemeyle ilgili StackOverflow'taki bir çok soru, bunun basitçe işe yaramadığını söyledi. "AddDocument" yöntemi de hiçbir şey yapmaz mı?

Bu yöntem, bu eylemin desteklendiğini söylüyor. Kafam karıştı.

enter image description here

+1

Bir .cs dosyası eklerseniz ne olur? Http://source.roslyn.codeplex.com/#Microsoft.CodeAnalysis.Workspaces.Desktop/Workspace/MSBuild/MSBuildWorkspace.cs,1285b31dd95f5004 adresinde, orada bazı uzantı şeyler görüyorum. (Ayrıca, bu kod VS2015 Önizlemesinden beri değişti) –

+0

Beta1'den beta2'ye paketleri güncelleştirdikten sonra çalışmaz. "cs" dosya uzantısı bir şey yapmadı. – user2932893

cevap

8

Roslyn en tüm çalışma alanı & sözdizimi API'leri değişken değildir.

p.AddDocument oluşturur sen görmezden geldiğin, (döndürülen Document arasında Project özelliğinde döndürülür) Yeni Project ve Solution. şeyi yapmalıdır

+0

Teşekkürler. Cevabınıza göre snippet oluşturabilirsem, o zaman kazanırsın. – user2932893

5

Bu seferki:

IWorkspace workspace = Workspace.LoadSolution(@"..\RoslynTest.sln"); 
var originalSolution = workspace.CurrentSolution; 
var project = originalSolution.GetProject(originalSolution.ProjectIds.First()); 
IDocument doc = project.AddDocument("index.html", "<html></html>"); 
workspace.ApplyChanges(originalSolution, doc.Project.Solution); 

kaynak: http://www.wenda.io/questions/982766/roslyn-add-a-document-to-a-project.html

GÜNCELLEME: artık geçerli değildir.

+0

Bu da yardımcı oldu. Belge nesnesinden yeni bir proje ve yeni çözümden alabileceğiniz şey çok açık değildi. – user2932893

+3

Bu cevabın ve cevabın bağlantısının, şu an kullanılan "Çalışma Alanı" ve "Belge" yerine artık kullanılmayan arabirimler "IWorkspace" ve "IDocument" kullandığını unutmayın. –

İlgili konular