2015-05-04 4 views
22

Wir haben ein Datenbankprojekt in Visual Studio 2013. In diesem Projekt haben wir eine .tt-Datei, die. SQL-Skript generiert. Das Problem ist, dass nach der Generierung die Build-Aktion der generierten Datei automatisch auf Build gesetzt wird. Wenn wir es manuell in None ändern, wird es nach dem Generieren (Ausführen des benutzerdefinierten Tools) auf Build zurückgesetzt.Generierte (durch T4) Datei Build Aktion wird auf Build zurückgesetzt

Eine andere seltsame Sache ist, dass es nur passiert, wenn .tt Datei im Datenbankprojekt und in irgendeinem Ordner dieses Projekts ist (nicht im root). Wenn sich die .tt-Datei in einem anderen Projekt (irgendwo) oder im Stammverzeichnis des Datenbankprojekts befindet, ändert sich die Erstellungsaktion der generierten Datei nach der Neugenerierung nicht.

Wir haben keine Visual Studio-Add-Ins und ich habe versucht, alle Erweiterungen und Updates zu deaktivieren, die deaktiviert werden könnten.

Ich werde Ihnen bei Bedarf Details geben.

+1

Haben Sie die [Transform on build] (https://msdn.microsoft.com/en-us/library/ee847423.aspx) zur Projektdatei hinzugefügt? Wird eine der Dateien nur gelesen? – lloyd

+0

@lloydm, Nein, es gibt keine Transformation beim Erstellen in der Projektdatei. Einige der Dateien im Projekt sind schreibgeschützt. – nightcoder

+0

Haben Sie sich die Lösungen angesehen, die für die Ausführung von [T4 auf jedem Build] veröffentlicht wurden (http://stackoverflow.com/questions/1646580/get-visual-studio-to-run-a-t4-template-on-every -bauen)? – lloyd

Antwort

1

Wie wird die Build-Aktion gespeichert? Im csproj Hinweis: generierte Klassendatei Kompilieren mit einer Build-Aktion von Compile

Hinweis: Kompilieren generatedFile.cs mit einer Build-Aktion von None

So jetzt ist es auf None zu setzen.

Ok eine T4-Vorlage, die die sqlproj ändert. Hinweis: Dies wird eine neue Datei für sqlproj statt Schreiben über Ihre vorhandenen sqlproj Speicher, wie Sie auf einem Minimum wollen:

  1. Sichern Sie Ihre sqlproj
  2. -Test auf eine neue Datei
  3. dies ändern um das sqlproj nur für den Fall zu sichern.
  4. Haben Sie einen extrem eindeutigen Dateinamen als Ziel.
  5. Lassen Sie sich diese als separate T4-Vorlage
  6. Run this nach dem Anpassungs-Tool

    <#@ template debug="true" hostSpecific="true" #> 
        <#@ output extension=".cs" #> 
        <#@ Assembly Name="System.Core" #> 
    
        <#@ import namespace="System" #> 
        <#@ import namespace="System.IO" #> 
        <#@ import namespace="System.Collections.Generic" #> 
    
        <# 
        string file = @"C:\...\MyProject.sqlproj"; 
    
    
    
         string [] lines = System.IO.File.ReadAllLines(file); 
    
    
         //relative path of file you want to change build action 
         string target = @"Models\GeneratedClass.cs"; 
         //find the line that has your class 
         for(int i = 0; i < lines.Length ; i++) 
         { 
    
          if(lines[i].Contains(target)) 
          { 
           //Replace Compile with None 
           lines[i].Replace("Compile", "None"); 
    
          } 
         } 
    
         string templateDirectory = Path.GetDirectoryName(Host.TemplateFile); 
         string outputFileName = "newCSProj.sqlproj"; 
         string outputFilePath = Path.Combine(templateDirectory, outputFileName); 
    
         File.WriteAllLines(outputFilePath, lines); 
    
        #> 
    

Hier ist die Warnung von Visual Studios zeigt, bevor eine Textvorlage

Sicherheitswarnung ausgeführt wird: Das Ausführen dieser Textvorlage kann Ihrem Computer möglicherweise schaden. Führen Sie es nicht aus, wenn Sie es von einer nicht vertrauenswürdigen Quelle erhalten haben.

+0

und es gibt bessere Möglichkeiten zum Ändern der [Projektdatei] (http://blogs.msdn.com/b/msbuild/archive/2005/11/07/490068.aspx) – lloyd

1

Diese Antwort wurde in Kommentaren erwähnt, aber jemand könnte es übersehen. Geänderte Ausgabeerweiterung zu z.B. ".sqlscript" und die Standard-Build-Aktion sind None.

<#@ output extension=".sqlscript" #> 

Sie auch Standard-Editor für diese Erweiterung zu

"Microsoft SQL Server-Datentools, T-SQL-Editor"

so können Sie lesen und bearbeiten Sie es als Standard ändern T-SQL-SkriptGehe einfach zu

Extras -> Optionen .. -> Texteditor -> Dateierweiterungen.

Es löst nicht das Problem mit ".SQL" -Dateien, aber es ist eine gute Abhilfe und funktioniert gut für mich. Ich habe es in VS2015 getestet, aber es funktioniert wahrscheinlich ähnlich in VS2013.

Verwandte Themen