2017-03-15 3 views
0

gebrochen Ich habe eine Design-Zeit T4-Vorlage, die seit Jahren in VS2013 und VS2015 gearbeitet hat.T4-Baugruppe Richtlinie in Visual Studio 2017

In VS2017 kann die Vorlage nicht mit einer MissingMethodException ausgeführt werden. Die fragliche Methode befindet sich in einer benutzerdefinierten Assembly. Die Assembly wird mit einem absoluten Pfad zusammen mit dem Makro $ (SolutionDir) referenziert. So etwas wie:

<#@ assembly name="$(SolutionDir)path\my.dll"#> 

Ich habe den Fusion Log Viewer verwendet, um dieses Problem zu debuggen. Anscheinend "my.dll" kann nicht gefunden werden. Und gemäß den Protokollen sucht Visual Studio nicht im absoluten Pfad.

Ich nehme an, dies ist ein Fehler innerhalb der T4VSHost. Gibt es da eh eine Lösung oder Abhilfe?

+0

Um dieses Problem zu umgehen, platziere ich meine.dll im "my" -Unterverzeichnis von $ (DevEnvDir). Persönlich halte ich das für eine schlechte Praxis. Aber Fusion wird es so finden. Ich würde es vorziehen, es irgendwo verantwortungsvoller zu platzieren und Fusion anweisen, wo es zu finden ist. –

+0

Kann der Dateipfad hartcodieren? – qxg

+0

@qxg, schlägst du vor, dass etwas mit dem Makro (oder der Makroexpansion) nicht stimmt? Anscheinend ist das nicht das Problem. Ich habe den Weg festgeschrieben, um die Theorie zu testen - nein. –

Antwort

0

Visual Studio hält 2017 und früher eine Sperre für Assemblys, die in der aktuellen VS-Sitzung erstellt wurden. Wenn dein Pfad also ungefähr so ​​aussieht.

<#@ assembly name="$(SolutionDir)SomeProjectFolder\bin\Debug\SomeAssembly.dll" #>

Dann wird der T4-Engine eine Ausnahme aus, die Versammlung zu sagen kann nicht gefunden werden. Wenn Sie die Lösung erneut erstellen und dann die T4-Vorlage ohne Erstellung ausführen, wird sie ordnungsgemäß ausgeführt.

Dies macht das Debuggen oder anderweitige Arbeiten an Baugruppen, die in erster Linie als Referenz in T4-Vorlagen gedacht sind, ein Schmerz.