Ist es möglich, während eines Visual Studio/TFS-Builds in den Roslyn-Build-Prozess einzubinden, und wenn ja, ist es möglich, Microsoft.CodeAnalysis.Solution/Microsoft.CodeAnalysis in den Griff zu bekommen. Projektinstanz wird von Roslyn während der Kompilierung verwendet?Hook in den Roslyn-Build-Prozess
Antwort
So wie ich es sehe, ist Jon in seinem Kommentar ziemlich richtig. Ich würde vorschlagen, eine MSBuild-Aufgabe zu erstellen, die Ihr gewünschter Hook in den Build-Prozess ist.
Erstellen Sie eine MSBuild-Projektdatei (Sie haben sie wahrscheinlich schon gesehen, es sind die Dateien mit der Erweiterung .targets
). Es sieht etwa so aus:
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask TaskName="MyNamespace.MyReferenceValidationTask" AssemblyFile="MyPath\MyNamespace.dll"/>
<Target
BeforeTargets="BeforeCompile"
Name="ValidationTarget">
<MyNamespace.MyReferenceValidationTask
SolutionRoot="$(SolutionDir)" />
</Target>
</Project>
Das Attribut in dem "MyNamespace.MyReferenceValidationTask" tag "SolutionRoot" ist Ihr Eigentum in Ihrer Aufgabe. Alle Makros, die in Visual Studio verfügbar sind, sind auch hier verfügbar. (Siehe diesen Beitrag hier: https://stackoverflow.com/a/1453023/978594)
Was Sie innerhalb der Aufgabe tun, liegt ganz bei Ihnen. Sie können zum Beispiel Ihre Lösungsdatei mit Roslyn laden und haben somit alle Projekte und ihre Referenzen und führen Ihre gewünschte Validierung durch.
Es wäre einfacher, Ihnen zu helfen, wenn Sie sagen würden, was Sie erreichen möchten. Zum Beispiel können Sie zusätzliche Codediagnosen relativ einfach hinzufügen. –
@Jon: Ich möchte eine Referenzvalidierung (zB Projekte, die keine anderen Projekte referenzieren sollten) für die zu erstellenden Projekte machen, also muss ich die Microsoft.CodeAnalysis.Solution-Instanz, die gerade erstellt wird, in den Griff bekommen. – dotarj
Rechts. Das hört sich an, als wäre es etwas besser auf eine MSBuild-Aufgabe als Roslyn ausgerichtet ... was nicht bedeutet, dass es in Roslyn natürlich nicht so ist. –