Ich habe eine T4-Vorlage, die mehrere Tt-Dateien in meinem Projekt verarbeitet. Ich habe auch einige benutzerdefinierte Klassen, die ich definiert habe, um mit dem Code-Transformationsprozess zu helfen.T4-Codegenerierung während des Builds, benutzerdefinierte Assemblyreferenz
Dies funktioniert in Visual Studio, ich habe ein VS-Makro, das $ (TargetDir) korrekt definiert.
Jetzt möchte ich den Code-Generierungsprozess während meines Build-Prozesses durchführen. Ich fügte hinzu:
<TransformOnBuild>true</TransformOnBuild>
<OverwriteReadOnlyOutputFiles>true</OverwriteReadOnlyOutputFiles>
<IncludeDslT4Settings>true</IncludeDslT4Settings> <ItemGroup>
<T4ReferencePath Include="$(OutputPath)" />
</ItemGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />
Mein Build läuft, aber ich bekomme:
C: \ Program Files (x86) \ MSBuild \ Microsoft \ Visualstudio \ TextTemplating \ v10.0 \ Microsoft.TextTemplating. Ziele (407): Der Host hat beim Versuch, die Assemblyreferenz '$ (TargetDir) \ MyDependency.dll' aufzulösen, eine Ausnahme ausgelöst. Die Transformation wird nicht ausgeführt. Die folgende Ausnahme wurde ausgelöst: System.IO.FileLoadException: Der angegebene Assemblyname oder Codebase war ungültig. (Ausnahme von HRESULT: 0x80131047) bei System.Reflection.AssemblyName.nInit (RuntimeAssembly & Montage, Boolesche forIntrospection, Boolean raiseResolveEvent) bei System.Reflection.AssemblyName.nInit() bei Microsoft.VisualStudio.TextTemplating.GlobalAssemblyCacheHelper.GetLocation (String Strong) bei Microsoft.VisualStudio.TextTemplating.Sdk.Host.GenericTextTemplatingHost.ResolveAssemblyReference (String assemblyReference) bei Microsoft.VisualStudio.TextTemplating.Engine.ResolveAssemblyReferences (ITextTemplatingEngineHost Host, TemplateProcessingSession Sitzung). Zeile = -1, Spalte = -1
Offensichtlich wird $(TargetDir)
im Team Build-Kontext nicht aufgelöst werden.
Ich habe versucht, TargetDir zu der Eigenschaftsgruppe meiner Buildkonfiguration hinzuzufügen, jedoch ohne Erfolg. Dieser Wert wird nicht in den Kontext des T4-Codegenerators übertragen.
Ich möchte keine Umgebungsvariable verwenden.
Wie kann ich $(TargetDir)
im Teambuild-Kontext korrekt einstellen?
Oleg Sych schrieb über msbuild Integration: http: //www.olegsych.com/2010/04/verständnis-t4-msbuild-integration/# IncludeFolders. Ich kann nicht sagen, ob es Ihr Problem löst, aber es scheint eine ziemlich gute Anleitung zu dem Thema zu sein. – FuleSnabel
Yeah, no dice there .. –