Typescript: Visual Studio-Option "Keine Kompilierung"

Erstellt am 11. März 2015  ·  29Kommentare  ·  Quelle: microsoft/TypeScript

Hallo,

Wir haben kürzlich eine Erweiterung für das grunt-ts-Plugin entwickelt, mit der eine Visual Studio-Projektdatei auf TS-Dateipfade und TS-Konfigurationsinformationen ausgerichtet werden kann, anstatt src: und die anderen Optionen verwenden zu müssen. https://github.com/TypeStrong/grunt-ts/pull/215

Mit Grunt-ts und dem Task Runner Explorer können Entwickler Funktionen verwenden, die von der Benutzeroberfläche der Visual Studio TypeScript-Projekterstellungskonfiguration noch nicht unterstützt werden (z. B.erveConstEnums).

Eine Sache bei der Verwendung von Task Runner Explorer ist, dass nur bestimmte Visual Studio-Ereignisse eingebunden werden können. Darunter ist "nach dem Bau" und "vor dem Bau". After Build funktioniert hervorragend, aber es gibt das seltsame Problem, dass VS einen eigenen Kompilierungsschritt des TypeScript ausführt, gefolgt von grunt-ts, die tsc aufrufen. Dies scheint kein Problem zu sein, außer für die Leistung (die Arbeit, die VS zum Kompilieren und Ausgeben leistet, ist verschwendeter Aufwand und der Entwickler muss länger auf das gewünschte Ergebnis warten).

Ich frage mich, wie wir am besten nur die Kompilierung / Ausgabe in Visual Studio für TypeScript deaktivieren können, aber alles andere gleich lassen (Hervorheben von Sprachdiensten / Syntax, Fehlerliste, C # - oder VB-Erstellung usw.). Ist das überhaupt noch möglich? Wenn nicht, könnte es sein?

Vielen Dank!

Question

Hilfreichster Kommentar

Nur zu Ihrer Information, in VS2015 RTM gibt es eine einfachere Möglichkeit, TypeScriptCompile zu deaktivieren:
Fügen Sie einfach <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> zu .csproj , z. B. in den ersten <PropertyGroup> .

Alle 29 Kommentare

Hallo, vor ein paar Tagen habe ich die Ausgabe Nr. 2252 eingereicht, die etwas damit zu tun hat. Ich brauche eine Möglichkeit, um Ereignisse vor und nach dem Erstellen auszulösen, wenn Compile-on-Save für ein TS-Projekt mit einer einzelnen Dateiausgabe verwendet wird (wobei die üblichen VS-Befehle "Build" und "Rebuild", Sprachdienst, Debugging usw. Beibehalten werden .). Um dieses Problem zu umgehen, verwende ich derzeit den Task Runner Explorer mit grunt-contrib-watch (gestartet mit der Bindung "Solution Open"), um die kompilierte Datei auf Änderungen zu überwachen und bei jeder Änderung zusätzliche Aktionen auszuführen.

Ich finde das jedoch nicht wirklich befriedigend (ich muss auch einige Vorkompilierungsaktionen ausführen und bevorzuge im Allgemeinen, dass Build-Schritte entweder alle mit Grunt oder alle mit VS ausgeführt werden) und überlege, genau das zu tun, was beschrieben wird: Deaktivieren Sie die VS-Kompilierung vollständig und implementieren Sie ein benutzerdefiniertes Compile-on-Save, vollständige Builds (einschließlich Ausführen von Komponententests usw.), Ereignisse vor und nach dem Build mit einer Kombination aus Grunt-Contrib-Watch, Grunt-Ts, zusätzlichen Grunt-Plugins und Task Runner Explorer .

(Update: Das wurde bereits implementiert und funktioniert einwandfrei. Jedes Mal, wenn eine .ts-Datei geändert wird, wird ein benutzerdefiniertes Grunt-Build-Skript ausgeführt. Derzeit werden jedoch die TRE-Bindungen "Before Build" und "After Build" für die oben genannten nicht unterstützt Gründe dafür).

Es scheint, dass der einfachste (und für TS-Plugin-Entwickler am wenigsten involvierte) Weg, solche Build-Szenarien effizient zuzulassen, darin besteht, eine Option zum Deaktivieren jeder von Visual Studio initiierten Form der Kompilierung bereitzustellen. Ich würde mich auch über Ideen freuen, wie das geht?

Ich weiß nicht, ob es momentan eine großartige Option für Sie gibt. Wenn Sie festlegen, dass jede .ts-Datei im Projekt Build Action: None in ihren Eigenschaften enthält, würde dies wahrscheinlich das tun, was Sie möchten, aber es ist ziemlich mühsam, dies auch in mittelgroßen Projekten manuell zu tun.

Build wird von Zielen in MSBuild-Projekten abgeleitet. Wenn Sie den Standard-Typenskript-Build deaktivieren möchten, entfernen Sie den Verweis auf die Typoskript-Ziele aus Ihrer Datei.

Dadurch sammelt Ihr Sprachdienst nicht alle Dateien im Projekt in einem Kontext. Ich würde sagen, das ist in Ordnung, und bis zur nächsten Version sollten wir tsconfig-Unterstützung haben, und dann wird das Ihr neues Projekt. Wenn Sie weiterhin möchten, dass es funktioniert, ohne tsconfig zu verwenden und / oder auf die nächste Version zu warten, definieren Sie eine Eigenschaft <TypeScriptEnabled>true</TypeScriptEnabled> in Ihrer Projektdatei.

@mhegazy meintest du <TypeScriptEnabled>false</TypeScriptEnabled> ?

gut je nachdem was du willst :)

Wenn Sie das Laden von Inhalten für Sprachdienstprojekte deaktivieren möchten, machen Sie es falsch.
Wenn Sie es aktivieren möchten, machen Sie es wahr. Es ist bereits durch Einbeziehen der Standardziele (Microsoft.TypeScript.targets) aktiviert.

OK, ich werde damit rumspielen. Vielen Dank!

Danke @mhegazy , die Konfigurationsoption scheint bisher zu funktionieren! (während immer noch Syntax- / Complie-Fehler angezeigt werden und das Debuggen im IE zugelassen wird) und kann sogar für eine bestimmte Lösungskonfiguration festgelegt werden (ich habe es versucht und es schien zu funktionieren), wie folgt:

<PropertyGroup Condition="'$(Configuration)' == 'Debug'">
...
    <TypeScriptEnabled>false</TypeScriptEnabled>
...
</PropertyGroup>

Ich bin mir jedoch nicht ganz sicher, was "Deaktivieren des Ladens von Inhalten für Sprachdienstprojekte" bedeutet. (Ich bin nicht sehr vertraut mit VS-Konzepten wie Zielen, Kontexten usw.). Soweit ich getestet habe, scheint mit dieser Option alles normal zu funktionieren (abgesehen von dem erwarteten Verhalten, beim Build nicht zu kompilieren)? Und es sieht so aus, als würde es immer noch <TypeScriptCompile Include=".."/> Einträge für neu hinzugefügte / erstellte .ts-Dateien in der Projektkonfiguration hinzufügen.

Nebenbei bemerkt, jetzt, da alles über Grunt erledigt ist, muss ich irgendwie einen Weg finden, um mit Kollisionen zwischen durch Grunt-Watch ausgelösten Builds und "Before Build" / "After Build" -gebundenen Ereignissen umzugehen, wenn ich VS Build (F6) - und Rebuild -Befehle, da VS automatisch speichert, bevor der Build beginnt, was dazu führt, dass zwei verschiedene Grunt-Instanzen unnötig parallel ausgeführt werden.

Ich konnte <TypeScriptEnabled>false</TypeScriptEnabled> zum Laufen bringen (VS 2013 Update 4 mit TypeScript 1.4), aber das Entfernen der TypeScript-Zieldatei aus dem Projekt hat die Kompilierung beim Erstellen des Projekts deaktiviert.

Hier sind die vollständigen Schritte, die zum Deaktivieren der TypeScript-Kompilierung in VS erforderlich sind (obwohl die Sprachdienste weiterhin funktionieren, das Refactoring weiterhin erfolgreich ist usw.):

  • Entfernen Sie den Verweis auf die TypeScript-Datei ".targets" aus der Projektdatei.
  • Deaktivieren Sie "TypeScript-Dateien, die nicht Teil eines Projekts sind, automatisch kompilieren" in den Visual Studio TypeScript-Optionen.

Der zweite Schritt ist eine Art Fehler (oder zumindest ist der Dialog nicht streng genau gekennzeichnet). Obwohl Ihre TypeScript-Dateien "Teil" eines Projekts sind, werden sie von Visual Studio 2013 beim Deaktivieren der Zieldatei so behandelt, als wären sie nicht Teil eines Projekts und werden beim Speichern kompiliert (wenn die globale Option nicht festgelegt ist). Ich konnte <TypeScriptEnabled/> dazu bringen, irgendetwas zu tun.

Danke @mhegazy - es wäre großartig, wenn dies Teil des TypeScript-

Eine schwierige Sache ist, dass <TypeScriptEnabled>false</TypeScriptEnabled> am Ende Ihrer Datei sein muss, insbesondere nach dem Import in die Ziele. wie die Ziele es sowieso definieren, und Sie möchten es überschreiben.

Eine schwierige Sache istfalsch muss sich am Ende Ihrer Datei befinden, insbesondere nach dem Import in die Ziele. wie die Ziele es sowieso definieren, und Sie möchten es überschreiben.

Du bist genau richtig! Das war der Trick.

Ich denke, das löst das Problem. Danke, @mhegazy .

Hi @mhegazy - tut mir leid, dass ich dich <TypeScriptEnabled>false</TypeScriptEnabled> in VS 2013 mit installiertem TypeScript 1.4 funktioniert? Ich habe gerade meinen aktuellen PC von VS 2013 mit TS 1.3 (direkt VS 2013 Update 4) auf VS 2013 mit TS 1.4 aktualisiert, und jetzt versucht Visual Studio, das TypeScript erneut "beim Erstellen" zu erstellen (dh die angezeigten Fehler haben "Erstellen" : "vor ihnen), obwohl die letzten fünf Zeilen meiner Projekte wie folgt sind:

  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />
  <PropertyGroup>
    <TypeScriptEnabled>false</TypeScriptEnabled>
  </PropertyGroup>
</Project>

Es hat heute auf diesem Computer richtig funktioniert (als ich dieses Ticket geschlossen habe), aber jetzt, wo ich 1.4 hier angelegt habe, gibt mir der Build from VS Fehler. Wenn Sie den Verweis auf die Zieldatei auskommentieren (und "Beim Speichern kompilieren" für TypeScript deaktivieren, das sich nicht in einem Projekt befindet), wird er weiterhin deaktiviert.

Ich habe 1.4 zu Hause und konnte dort überhaupt nicht <TypeScriptEnabled>false</TypeScriptEnabled> zum Arbeiten bringen - ich frage mich, ob es bei dieser Build-Option eine Regression gab?

<TypeScriptEnabled>false</TypeScriptEnabled> hat nichts mit Build zu tun. Es geht darum, dass Language Service Ihre Dateien als Teil eines Projekts behandelt oder nicht.

Wenn Sie nicht auf F5 aufbauen möchten, entfernen Sie den Verweis auf die Ziele.

Das war die kurze Antwort, hier ist die lange Version:

Die Projektdatei wird für zwei Dinge verwendet:

  1. Build, dies ist Ihre normale MSBuild-Unterstützung, bei der Ziele Aufgaben aufrufen und das System Eingaben findet, Ziele übereinstimmt und diese der Reihe nach ausführt. Alles, was dies bewirkt, ist, alle TypeScriptCompile-Elemente im Projekt zu aggregieren und sie zusammen mit einigen Optionen an tsc.exe zu übergeben.
    Darüber hinaus werden die Projekteigenschaftsseiten aus Ihrer Projektdatei abgeleitet und sind nur Benutzeroberflächen über MSBuild-Eigenschaften.
  2. Sprachdienst, dies ist Ihre Fertigstellung, Signaturhilfe, Fehler in VS, Kompilieren beim Speichern usw. Wir möchten, dass diese genauso funktionieren wie Ihr normaler Build. Daher suchen wir nach denselben Eigenschaften, die Sie für den Build definiert haben, und steuern die LS-Verhalten. Wenn Ihr Ziel beispielsweise in Ihrer Projektdatei auf ES3 festgelegt ist ( <TypeScriptTarget>ES3</TypeScriptTarget> ), gibt Ihnen Ihr Sprachdienst ein rotes Kringel, wenn Sie ein Get / Set in einer Klasse definieren.
    Auf diese Weise können Sie eine Reihe von Optionen sowohl für das Build- als auch für das Design-Zeitverhalten verwenden.
    Damit dies funktioniert, teilen die Ziele dem Sprachdienst mit, dass er sich mit Typoskript auskennt, indem sie eine Eigenschaft <TypeScriptEnabled>true</TypeScriptEnabled> .

Wenn Sie nicht möchten, dass Build in VS funktioniert, entfernen Sie einfach die Ziele. Dadurch wird der Build deaktiviert, dem LS wird jedoch auch mitgeteilt, dass es sich bei diesem Projekt nicht um ein TypeScript-Projekt handelt. und es werden dann alle Dateien als "lose Dateien" behandelt. Wenn dies für Sie in Ordnung ist, ist keine weitere Arbeit erforderlich. Wenn Sie dies ändern und sicherstellen möchten, dass die Eigenschaften Ihrer Projektdatei weiterhin verwendet werden und keine anderen in Ihrem Projekt geöffneten Dateien usw. enthalten, fügen Sie Ihrer Datei <TypeScriptEnabled>true</TypeScriptEnabled> , und der LS behandelt sie entsprechend .

Wenn Sie möchten, dass der Build in VS funktioniert, der LS ihn jedoch nicht als Projekt behandelt, setzen Sie das Flag auf false.

Vielen Dank. Dies sind großartige Informationen und alles scheint konsistent mit dem zu funktionieren, was Sie beschrieben haben. Wenn ich die .targets-Datei entfernt, aber TypeScriptEnabled auf true gesetzt habe, wird erwartet, dass die Registerkarte TypeScript Build aus den Projekteigenschaften verschwindet?

  <!--
  <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition="Exists('$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets')" />
  -->
  <PropertyGroup>
    <TypeScriptEnabled>true</TypeScriptEnabled>
  </PropertyGroup>
</Project>

In diesem Fall erscheint dies seltsam, da es keine Möglichkeit gibt, die Einstellungen zu steuern, auf die in der Benutzeroberfläche zugegriffen werden konnte, ohne das Ziel erneut zu aktivieren und dann die Benutzeroberfläche zu verwenden (oder realistischer, wenn Sie die TS-Projekteinstellung seitdem direkt an diesem Punkt bearbeiten du bist sowieso da drin).

Der Grund, warum ich das alles frage, ist, dass ich vor einigen Wochen eine npm-Bibliothek geschrieben habe, um die TypeScript-Build-Eigenschaften aus .csproj und .vbproj (https://www.npmjs.com/package/csproj2ts) zu lesen, die ich bin derzeit in grunt-ts integriert. Wenn es fertig ist, gibt es eine einfache Möglichkeit, tsc effektiv gegen eine .csproj-Datei auszuführen (wie hier angefordert: https://github.com/Microsoft/TypeScript/issues/1702). Ich möchte in der Lage sein, den Leuten zu sagen, wie sie ihr Projekt am besten einrichten können, um den VS TypeScript-Sprachdienst für ihre Codierungserfahrung zu verwenden, aber zum Erstellen ausschließlich Grunzer verwenden. Ich hatte gehofft, dass es in diesem Szenario möglich sein würde, Benutzer die Benutzeroberfläche zum Konfigurieren von TypeScript-Eigenschaften verwenden zu lassen, aber vielleicht wird dies nicht der Fall sein.

Kennen Sie eine Möglichkeit, die Registerkarte "TypeScript-Erstellung" mit deaktivierter TypeScript-Zieldatei anzuzeigen?

Auch wenn ich so etwas mache: <Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TypeScript\Microsoft.TypeScript.targets" Condition=" '$(Configuration)' == 'Debug' " /> , muss ich die Projektkonfiguration auf Debug setzen und dann neu laden, damit die Registerkarte TypeScript Build angezeigt wird.

Sorry, @mhegazy - ich verspreche dir, trolle !!

Wird erwartet, dass die Registerkarte TypeScript Build aus den Projekteigenschaften verschwindet?

Ja, die Eigenschaftenseiten sind in den Zielen verdrahtet. Wenn Sie sie entfernen, wird die Benutzeroberfläche entfernt. Sie müssen die Datei manuell bearbeiten

Der Grund, warum ich das alles frage, ist, dass ich vor einigen Wochen eine npm-Bibliothek geschrieben habe, um die TypeScript-Build-Eigenschaften aus .csproj und .vbproj (https://www.npmjs.com/package/csproj2ts) zu lesen, die ich bin derzeit in grunt-ts integriert.

Das Szenario, das Sie erreichen möchten, ist machbar, weist jedoch einige Ecken und Kanten auf, und Sie müssen einige Stellen hacken, damit es funktioniert. @paulvanbrenk fügt derzeit Unterstützung für tsconfig in VS hinzu. Dadurch können die Projekteigenschaftsseiten die tsconfig-Datei verwenden, wenn sie dort vorhanden war. Wir arbeiten auch an einer besseren Integration in ASP.net 5-Projekte , von denen ich glaube, dass sie alles tun, was Sie wollen, nämlich 1. Unterstützung von Grubt / Bower, 2. eine dateisystembasierte Ansicht, 3. Verwenden von tsconfig zum Verwalten von Projekteigenschaften und 4. einfache Interaktion mit anderen Editoren / IDEs. Ich glaube, das wird gut mit dem Szenario funktionieren, das Sie beschreiben, und Sie müssen sich nicht darum herumhacken. Dies wird jedoch in der nächsten Version kommen, so dass einige Wartezeiten erforderlich sind :)

Es scheint auch, wenn ich so etwas mache: Ich muss die Projektkonfiguration auf Debug setzen und dann neu laden, damit die Registerkarte TypeScript Build angezeigt wird.

Importe werden geladen, wenn das Projekt geladen wird. In diesem Import heißt es also, nur in 'Konfiguration' 'Debug' geladen. Wenn Sie die Konfiguration ändern, wird kein erneutes Laden erzwungen.

Sorry, @mhegazy - ich verspreche dir, trolle !!
: D keine Sorge. Ich freue mich immer über Feedback und hoffe, dass das geholfen hat.

IN ORDNUNG. Vielen Dank für diese hervorragenden Informationen und die gründliche Diskussion.

Nur um es an @paulvanbrenk zu tsconfig den VisualStudio TypeScript-Build zu deaktivieren (dh STRG + UMSCHALT + B) erstellt Ihr C # und etc, aber nicht TypeScript) und verwendet einen externen TypeScript-Compiler, während Sie die TypeScript-Optionen über die GUI festlegen können. Es gibt viele Gründe, warum die Verwendung eines externen Kompilierungswerkzeugs sehr hilfreich sein kann, und im Moment scheint dies wirklich nur durch Zufall und mit einigen Ecken und Kanten unterstützt zu werden.

Die Idee von tsconfig ist großartig, aber sie hilft nicht wirklich bei:

  • Verwenden einer alten Version von TypeScript
  • Verwenden verschiedener Versionen von TypeScript in verschiedenen Projekten auf demselben Computer
  • Verwenden einer experimentellen Version von TypeScript (z. B. der Version von @fdecampredon , die JSX unterstützt)
  • Verwenden eines Build-Tools wie grunt-ts, das die Referenzverwaltung automatisiert und andere Aufgaben erledigt, die TypeScript nicht unterstützt
  • Usw.

Es wäre fantastisch, Visual Studio-Benutzern zu erlauben, ein von der Community entwickeltes TypeScript-Compilersystem auszuwählen, während die schöne Benutzeroberfläche in Visual Studio erhalten bleibt (insbesondere mit dem netten Task Runner Explorer-Add-On). Ich hoffe, Sie werden die erheblichen Vorteile für die Community, die dies ermöglichen würde, gegen die Zeit abwägen, die Sie zum Codieren eines Kontrollkästchens mit der Aufschrift "TypeScript Build deaktivieren" benötigen würden.

Ich hoffe, Sie werden die erheblichen Vorteile für die Community, die dies ermöglichen würde, gegen die Zeit abwägen, die Sie zum Codieren eines Kontrollkästchens mit der Aufschrift "TypeScript Build deaktivieren" benötigen würden.

Dies ist der Teil, in dem ich verwirrt bin. Für mich bedeutet dies, die Referenz für Typoskript-Ziele zu entfernen und sie dann durch Ihre Grunzziele zu ersetzen, die die Dinge anders aufbauen. Es kommt mir seltsam vor, eine .targets-Datei mit einer Bedingung einzuschließen, die sie auffordert, nichts zu tun. Warum sollte man es überhaupt aufnehmen? Ich würde gerne helfen, eine .targets-Datei zu erstellen, die die Standard-Typoskript-Ziele ersetzt. Diese enthält das <TypeScriptEnabled>true</TypeScriptEnabled> -Tag und sieht für VS so aus, als wäre es das Standard-Tag, aber es wird anders erstellt.

Huh. Ich hätte darüber nachdenken sollen - ich glaube, ich habe die .targets-Datei als diese unveränderliche Sache behandelt, aber das macht natürlich Sinn. Ich werde das Zieldateiformat untersuchen und mich bei Ihnen melden.

Ein einfacher Weg, um zu beginnen, besteht darin, die Zieldatei Microsoft.TypeScript.Target zu kopieren, Dinge zu entfernen, die Sie nicht interessieren, z. B. tsc aufzurufen, und Aufgaben hinzuzufügen, um grunt aufzurufen, und die Konfiguration zu verkabeln usw. und sie dann in aufzunehmen dein Projekt.

Genial! Ich habe alles aus einer minimalistischen Perspektive zum Laufen gebracht, indem ich meine .csproj-Datei mit den folgenden 4 Zeilen eingestellt habe.

  <Import Project="$(ProjectDir)\custom.TypeScript.targets" />
  <PropertyGroup>
    <TypeScriptEnabled>true</TypeScriptEnabled>
  </PropertyGroup>

Die minimalistische Datei custom.TypeScript.targets lautet wie folgt:

<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <VsToolsPath Condition="'$(VsToolsPath)' == ''">$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)</VsToolsPath>
  </PropertyGroup>
  <UsingTask TaskName="TypeScript.Tasks.VsTsc" AssemblyFile="$(VSToolsPath)\TypeScript\TypeScript.tasks.dll" />
  <PropertyGroup>
    <CfgPropertyPagesGuidsAddCSharp>{d4683cae-88c4-4b85-863d-ac8014f3ba36}</CfgPropertyPagesGuidsAddCSharp>
    <CfgPropertyPagesGuidsAddVB>{d4683cae-88c4-4b85-863d-ac8014f3ba36}</CfgPropertyPagesGuidsAddVB>
    <CfgPropertyPagesGuidsAddTypeScript>{d4683cae-88c4-4b85-863d-ac8014f3ba36}</CfgPropertyPagesGuidsAddTypeScript>
  </PropertyGroup>
  <ItemGroup>
    <ProjectCapability Include="TypeScript" />
  </ItemGroup>
</Project>

Ich habe versucht, das <TypeScriptEnabled /> -Tag in die Zieldatei einzufügen, aber es hat nicht funktioniert (VS hat die .ts-Dateien als lose behandelt). Irgendeine Idee warum das so ist? (Ich bin sicher, für jemanden, der MSBuild kennt, ist dies offensichtlich - vielleicht eine Art Umfangsproblem?).

Ich denke, dass dies mein Problem an dieser Stelle löst. Ich kann meine Grunt-Aufgabe mit der Task Runner Explorer-Erweiterung ausführen, mit der Grunt- oder Gulp-Aufgaben gestartet werden können, wenn ein VS-Build ausgelöst wird. Der Build wird jetzt unabhängig vom TypeScript-Kompilierungsergebnis immer als erfolgreich angezeigt. Dies ist jedoch in Ordnung, da der Benutzer die Ausgabe von grunt-ts im TRX-Fenster sehen kann. Das Fenster "TypeScript Build" wird im Fenster mit den Projekteigenschaften angezeigt. Beim Speichern kompilieren funktioniert, wenn diese Option ausgewählt ist. Der Build wird weiterhin als fehlgeschlagen angezeigt, wenn der C # - oder VB-Code nicht erfolgreich kompiliert wurde (eine gute Sache). Das Setup, um von einem Standard-Visual Studio "HTML-Anwendung mit TypeScript" - oder ASP.NET-Webprojekt hierher zu gelangen, ist ziemlich einfach.

Können Sie ein Problem damit sehen, dass wir die oben genannte minimalistische .targets-Datei mit grunt-ts verteilen? Das würde bedeuten, dass wir nur die Leute anweisen müssten, die .targets-Zeile ihres Projekts auf <Import Project="$(ProjectDir)\node_modules\grunt-ts\custom.TypeScript.targets" /> zu aktualisieren und <TypeScriptEnabled> festzulegen.

Danke noch einmal!!

Ich habe versucht, das zu setzen Tag in der Zieldatei, aber es funktionierte nicht (VS behandelte die .ts-Dateien als lose). Irgendeine Idee warum das so ist? (Ich bin sicher, für jemanden, der MSBuild kennt, ist dies offensichtlich - vielleicht eine Art Umfangsproblem?).

das ist merkwürdig. So haben wir es in unseren Zielen und es funktioniert gut. Schließen Sie andere Ziele ein, die die Eigenschaft haben? irgendwelche Bedingungen? Ich habe es in einem neuen ts-Projekt versucht, Microsoft.TypeScript.targets entfernt, deins hinzugefügt und hinzugefügtwahr und das hat funktioniert.

Können Sie ein Problem damit sehen, dass wir die oben genannte minimalistische .targets-Datei mit grunt-ts verteilen? Das würde bedeuten, dass wir den Leuten nur sagen müssten, dass sie die .targets-Zeile ihres Projekts aktualisieren sollen und setzen.

Ich denke, das ist der richtige Weg. Ich würde nur versuchen, das TypeScriptEnabled auch dort zu bekommen. Lassen Sie mich wissen, wie ich bei der Diagnose des Problems helfen kann

Mit ein paar Anmerkungen benötigen Sie weder die Referenz "functions.dll" noch die Definition von VsToolsPath, es sei denn, Sie benötigen sie für etwas anderes.

Ich sehe das Verhalten, das Sie auf meinem Heimcomputer vorhergesagt haben. Es funktionierte auch ohne den Verweis auf die DLL. Ich muss vorher einen Fehler gemacht haben, also werde ich es morgen noch einmal ausprobieren. Ich finde das wirklich toll! Danke, Mohamed. Dies sollte in den nächsten Tagen im Rahmen von Grunzen veröffentlicht werden.

Eine Sache, die dies verursachen könnte, ist, dass Zieldateien nur einmal in VS geladen werden. Wenn Sie also die Ziele bearbeiten, werden die Änderungen erst in Ihrem Projekt wiedergegeben, wenn Sie VS neu starten.

Das hätte es sein können; Ich habe gerade das Projekt entladen / neu geladen. Möglicherweise habe ich VS zu Hause neu gestartet. Ich werde das in den Dokumenten notieren.

@mhegazy Danke für all deine Hilfe. Wir haben grunt-ts 4.0.0 veröffentlicht, das die Funktion "Aus Visual Studio Project kompilieren" enthält:

https://github.com/TypeStrong/grunt-ts#vs

Anweisungen zum Deaktivieren des VS-Builds:

https://github.com/TypeStrong/grunt-ts/blob/master/docs/DisableVisualStudioBuild.md

Sehr cool! Ich liebe die Szenarien, die dies ermöglicht.

Danke, Ryan. Ich bin ziemlich zufrieden mit dem Ergebnis. Wenn tsconfig zustande kommt, ist es möglicherweise weniger notwendig, aber dies wird die Lücke bis dahin schließen und ist natürlich mit TypeScript-Compilerversionen vor 1.5 kompatibel.

PS: Es gab heute zwei Fehlerberichte, daher sollten wir heute Abend eine Version 4.0.1 veröffentlichen, vorausgesetzt, ich kann sie korrigieren.

Nur zu Ihrer Information, in VS2015 RTM gibt es eine einfachere Möglichkeit, TypeScriptCompile zu deaktivieren:
Fügen Sie einfach <TypeScriptCompileBlocked>true</TypeScriptCompileBlocked> zu .csproj , z. B. in den ersten <PropertyGroup> .

Vielen Dank.

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen