2017-07-24 1 views
1

Da ich seine Fähigkeit brauchte, gab ich ein NuGet-Paket ab, das in der Lage sein sollte, reguläre Ausdrücke in meinem Build zu verarbeiten, dessen Ziel besteht darin, die .NET Framework-Versionsnummer in eine Umgebungsvariable umzuwandeln, so dass beispielsweise aus 4.7 NET47 wird. Ich bin mit regulären Ausdrücken mehr als genug vertraut, um das zu erreichen, und die Aufgabe läuft perfekt, wenn ich die Assembly von einem Konsolenprogramm aus anrufe. Es sucht und lädt die Assembly, führt ihre Execute-Methode aus und legt die erwarteten Eigenschaftswerte fest. Wenn ich versuche, die Aufgabe in einem Build auszuführen, meldet MSBuild wie folgt.Der Task "RegularExpressionMatching" konnte nicht von der Assembly RegexMatch.MSBuildTask geladen werden.

Die "RegularExpressionMatching" Aufgabe nicht von der Baugruppe R egexMatch.MSBuildTask, Version = 1.0.0.7, Culture = neutral, PublicKeyToken = 659f28f508fc4cd9, processor = MSIL geladen werden konnte. Bestätigen Sie, dass die Deklaration korrekt ist, dass die Assembly und alle zugehörigen Abhängigkeiten verfügbar sind und dass die Task eine öffentliche Klasse enthält, die Microsoft.Build.Framework.ITask implementiert. C: \ Benutzer \ DAVE \ Dokumente Visual Studio 2013 \ Projects \ \ WizardWrx_Libs \ DLLServices2 \ ConsoleStreamsLab \ ConsoleStreamsLab_4.7 \ ConsoleStreamsLab_4.7.csproj 81 5 ConsoleStreamsLab_4.7

Mein Usingtask-Element wird wie folgt.

<UsingTask TaskName="RegularExpressionMatching" 
      AssemblyName="RegexMatch.MSBuildTask, Version=1.0.0.7, Culture=neutral, PublicKeyToken=659f28f508fc4cd9, processorArchitecture=MSIL" /> 

Mein Zielblock folgt.

Die ersten beiden Nachrichten erscheinen genau wie erwartet im Buildprotokoll und werden als nächstes angezeigt.

------ Build started: Project: ConsoleStreamsLab_4.7, Configuration: Debug Any CPU ------ 
Build started 2017/07/24 15:14:29. 
SecondMatch: 
    TargetFrameworkVersion = v4.7 
    DefineConstants  = DEBUG;TRACE 
C:\Users\DAVE\Documents\Visual Studio 2013\Projects\WizardWrx_Libs\DLLServices2\ConsoleStreamsLab\ConsoleStreamsLab_4.7\ConsoleStreamsLab_4.7.csproj(81,5): error MSB4062: The "RegularExpressionMatching" task could not be loaded from the assembly RegexMatch.MSBuildTask, Version=1.0.0.7, Culture=neutral, PublicKeyToken=659f28f508fc4cd9, processorArchitecture=MSIL. Confirm that the <UsingTask> declaration is correct, that the assembly and all its dependencies are available, and that the task contains a public class that implements Microsoft.Build.Framework.ITask. 

Build FAILED. 

Time Elapsed 00:00:00.00 
========== Build: 0 succeeded, 1 failed, 1 up-to-date, 0 skipped ========== 

Diagnostic Level Build Log ist ein früherer Versuch, mit der Protokollierungsstufe ausführen, um Diagnose eingestellt. Obwohl es sehr viel mehr Informationen gibt, gibt es nichts davon, soweit ich das beurteilen kann.

Die Montage in Frage hat eine starken Namen, in den GAC auf der Maschine, auf der der Build lief, installiert und hat keine ungewöhnliche Abhängigkeiten, andere als die drei MSBuild Baugruppen.

Ich vermute, dass die Lösung in der Montage Referenzen in den RegExMatch Solution aufgeführt sein könnte, insbesondere Microsoft.Build.Utilities.v4.0, da ich nicht sicher bin, wie das mit der Build-Engine korreliert, die in Visual Studio 2013 ausgeführt wird, welches sich als Version 12 meldet (obwohl sich das nur auf die Version von Visual Studio beziehen kann, mit der es ausgeliefert wird).

Ich würde wirklich gerne das funktioniert, so dass ich diese Aufgabe die datengesteuerte Weise tun kann, und hart codierte Einstellungen zu beseitigen. Sobald ich einen Machbarkeitsnachweis habe, werde ich auch gerne eine Pull-Anfrage an den ursprünglichen Autor senden.

Ich werde meine Augen für gute Vorschläge öffnen.

Antwort

0

Haben Sie das Projekt der Erweiterungen importiert? Ich habe nicht die spezifischen Erweiterungen, die Sie verwenden, aber wenn ich die MSBuildExtensions benutzen ich hatte eine Menge von Linien auf die Wirkung hinzuzufügen:

<Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v10.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" /> 

Erst nachdem diese Zeile vorhanden war, war ich in der Lage, die Ziele Acess und benutze die Erweiterungen.

+0

Diese Änderung hatte keine Auswirkungen auf das Ergebnis. Wenn ich den Inhalt der Datei überprüfe, kann ich unmöglich sehen, wie sie etwas verändert hätte. Aber nachdem ich es vorher schon einmal erlebt hatte, ging ich weiter und das Ergebnis war genau das gleiche wie zuvor. –

+0

Also nur um zu überprüfen, ob Sie den Importpfad zu Ihrem neu erstellten nugget-Paket weitergeleitet haben? Wie in nicht kopieren Sie meine Zeile wörtlich, aber importieren Sie das Projekt, das Ihre Erweiterung enthält, die Sie verwenden möchten? – Spence

+0

WAS? Fügen Sie das VS-Projekt hinzu? Das ist blöd! Da andere Benutzer keinen Zugriff auf meinen Quellcode haben, ist dieser Vorschlag nicht übertragbar. Habe ich deine Absicht missverstanden? Natürlich habe ich deine Zeile nicht wörtlich kopiert; Ich habe es an meine Visual Studio Installation angepasst! –

Verwandte Themen