7

Ich habe vor kurzem begonnen, mit LuaInterface herumzuspielen, um Lua Scripting in meinen C# -Programmen arbeiten zu lassen. Um auf einfache Weise Lua-Skripte in Visual Studio zu erstellen, habe ich ein Lua-Syntax-Highlighting-Plugin installiert und eine Item-Vorlage erstellt, um neue Skripte zu erstellen, indem ich mit der rechten Maustaste auf die Projektdatei klicke und "Neues Objekt-> Lua-Skript" anwähle. Das funktioniert ganz gut.Ist es möglich, beim Erstellen von Dateien in Visual Studio 2010 automatisch "In Ausgabeverzeichnis kopieren" zu setzen?

Damit das Programm die Skripts finden kann, müssen sie im selben Verzeichnis (oder einem Unterverzeichnis) des Build-Verzeichnisses liegen. Dies ist genau, wo ich sie haben möchte, aber um dies zu tun, muss ich die Einstellung "In Ausgabeverzeichnis kopieren" für jede neue Datei, die ich erstelle, ändern.

Gibt es eine Möglichkeit, die Standardeinstellung dieser Option zu ändern? Im Moment wird standardmäßig "Nicht kopieren" gewählt. Ich konnte nur one other question finden, im Wesentlichen die gleiche Sache, aber die einzige Antwort, die dort zur Verfügung gestellt wurde, schlug ein Post-Build-Ereignis vor, das alle Dateien mit der gleichen Erweiterung an einen definierten Ort kopiert. Ich möchte das nicht wirklich machen, da sich das Ziel ändern könnte oder mehr Ziele hinzugefügt werden könnten (und zusätzliche Ereignisse erfordern würden?), Und ich würde gerne in der Lage sein, diese Einstellung pro Datei zu ändern.

Dies ist nur ein Convenience-Problem, da ich diese Option manuell für jede Datei ändern kann, aber in der Lage, den Rest des Prozesses zu automatisieren, hatte ich gehofft, ich könnte dieses letzte Detail auch automatisieren.

Antwort

4

Sie sollten in der Lage sein, einen IWizard Verweis auf die Vorlage hinzuzufügen, dies wird ausgeführt, wenn Sie auf ok im Fenster Datei -> Hinzufügen klicken. Sie müssen add the assembly and type an die vstemplate-Datei.

Implementieren Sie die RunFinished oder möglicherweise die Methode. Sie können dann mit dem EnvDTE Objekt von Visual Studio ausgesetzt beliebiges Element in der Lösung .. mit dem Standard-Visual Studio Extensibility Modell

The following code snippit zu manipulieren (aus der Open-Source-T4 Toolbox) zeigen, wie diese Eigenschaft einzustellen.

/// <summary> 
    /// Sets the known properties for the <see cref="ProjectItem"/> to be added to solution. 
    /// </summary> 
    /// <param name="projectItem"> 
    /// A <see cref="ProjectItem"/> that represents the generated item in the solution. 
    /// </param>   
    /// <param name="output"> 
    /// An <see cref="OutputFile"/> that holds metadata about the <see cref="ProjectItem"/> to be added to the solution. 
    /// </param> 
    private static void SetProjectItemProperties(ProjectItem projectItem, OutputFile output) 
    { 
     // Set "Build Action" property 
     if (!string.IsNullOrEmpty(output.BuildAction)) 
     { 
      ICollection<string> buildActions = GetAvailableBuildActions(projectItem);    
      if (!buildActions.Contains(output.BuildAction)) 
      { 
       throw new TransformationException(
        string.Format(CultureInfo.CurrentCulture, "Build Action {0} is not supported for {1}", output.BuildAction, projectItem.Name)); 
      } 

      SetPropertyValue(projectItem, "ItemType", output.BuildAction); 
     } 

     // Set "Copy to Output Directory" property 
     if (output.CopyToOutputDirectory != default(CopyToOutputDirectory)) 
     { 
      SetPropertyValue(projectItem, "CopyToOutputDirectory", (int)output.CopyToOutputDirectory); 
     } 

     // Set "Custom Tool" property 
     if (!string.IsNullOrEmpty(output.CustomTool)) 
     { 
      SetPropertyValue(projectItem, "CustomTool", output.CustomTool); 
     } 

     // Set "Custom Tool Namespace" property 
     if (!string.IsNullOrEmpty(output.CustomToolNamespace)) 
     { 
      SetPropertyValue(projectItem, "CustomToolNamespace", output.CustomToolNamespace); 
     }  
    } 
+0

Danke! Dies scheint zu funktionieren, aber haben Sie zufällig einen Link zu einem Beispiel oder einem Tutorial? Ich versuche, das Tutorial auf http://msdn.microsoft.com/en-us/library/ms185301.aspx zu folgen, aber ich finde es ein wenig schwierig zu verarbeiten. Es fällt mir auch schwer, eine Option zu finden, die die Einstellung 'In Ausgabeverzeichnis kopieren' steuert. Sie haben das EnvDTE-Objekt erwähnt, daher denke ich, dass es in der EnvDTE.ProjectItem.Properties-Auflistung enthalten ist. Dies ist das erste Mal, dass ich eine Editor-Erweiterung geschrieben habe, und es scheint, dass die Dokumentation für dieses Zeug ein wenig spärlich ist. –

+0

Codebeispiel von T4Toolbox Open-Source-Projekt hinzugefügt – jessehouwing

+0

Arbeitete sehr schön. Dieses Codebeispiel hat enorm geholfen. Vielen Dank! –