2016-08-10 3 views
1

Ich schreibe eine VSIX-Erweiterung, die IModelGenerationExtension erweitert, die einige Dinge nach einem Entity Data Model aktualisiert oder generiert wird.Namespace eines ProjectItem abrufen

public class ModelGenerationExtension : IModelGenerationExtension 
{ 
    public void OnAfterModelGenerated(ModelGenerationExtensionContext context) 
    { 
    } 
    public void OnAfterModelUpdated(UpdateModelExtensionContext context) 
    { 
     //need namespace of context.ProjectItem here 
    } 
} 

Da dies auf eine Entität Datenmodell arbeiten, das context.ProjectItem wird eine EDMX-Datei sein - lassen Sie uns diese Model1.edmx nennen. Dies wird eine Datei mit dem Namen Model1.tt enthalten, die wiederum verschachtelte .cs Dateien enthält, die jeweils einer Entität zugeordnet sind.

Was ich tun muss, ist, den Namespace einer dieser CS-Dateien (alle Entitäten werden auf dem gleichen Namespace sein) von der ProjectItem.

enter image description here

Wie kann ich über diese gehen?

Antwort

1

Es ist eine Weile her, seit ich eine VS-Erweiterung entwickelt habe, aber ich habe mir einen Teil meines alten Codes angeschaut, wie man nach diesen Dingen sucht. Vielleicht gibt es heute neue Technologien, aber das ist, was ich weiß:

Zunächst sollten Sie die richtige Datei finden, indem ProjectItems des Elements durch das Kind Iterieren Sie für Ihre Model1.edmx bekam die * CS-Dateien zu finden:

ProjectItem tt = context.ProjectItem.ProjectItems.OfType<ProjectItem>() 
         .FirstOrDefault(item => item.Name == "Model1.tt"); 

ProjectItem cs = tt.ProjectItems.OfType<ProjectItem>() 
         .FirstOrDefault(item => item.Name.EndsWith(".cs")); 

Dann könnten Sie die FileCodeModel dieser ProjectItem cs verwenden zum ersten Namespace-Konfiguration suchen:

CodeNamespace nsp = cs.FileCodeModel.CodeElements.Cast<CodeElement>(). 
      OfType<CodeNamespace>().First(); 

Und es sollten Sie Ihren Namespace-Element haben. CodeNamespace hat eine Eigenschaft Name und eine FullName.

Ich habe das zusammengefügt aus dem, was ich in meinen alten Codes gelesen habe, aber ich konnte es jetzt nicht testen. Sie müssen die Fehlerbehandlung hinzufügen, und ich bin nicht 100% sicher, dass die Dateihierarchie, wie Sie sie beschrieben haben, tatsächlich so reproduziert wird wie in der Hierarchie ProjectItems.

+0

Scheint zu arbeiten, danke! – Adrian

Verwandte Themen