2012-10-30 15 views
9

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?

+0

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

+0

Yeah, no dice there .. –

Antwort

4

Ich sehe nicht, wo $ (OutputPath) von Visual Studio definiert ist. hast du $ (TargetDir) in deinem Gegenstand w/in deinem Projekt versucht? Dann können Sie das $ (TargetDir) \ aus Ihrer Assembly-Deklaration in der T4-Datei entfernen.

Ich habe gerade eine ganze Reihe von Möglichkeiten durchgearbeitet, um etwas Ähnliches zur Arbeit zu bekommen, mache heute oder morgen einen Blogeintrag. So

:

<ItemGroup> 
    <T4ReferencePath Include="$(TargetDir)" /> 
</ItemGroup> 

in Ihrem csproj und

<#@ assembly name="MyDependency.dll" #> 

in Ihrem T4 Datei

+0

Hier ist der versprochene Blogbeitrag. Entschuldigung für das Zuspätkommen! http://netitude.bc3tech.net/2013/06/15/t4-gotchyas-in-your-environment/ – bc3tech

Verwandte Themen