From 837fa14fe37aab43895cf4a23d0fe34c0919e865 Mon Sep 17 00:00:00 2001 From: "Bogdan.Petranivskyy" Date: Wed, 9 Apr 2025 21:44:50 +0300 Subject: [PATCH] #7: Fix: Prevent double extension when using output directive in T4 templates --- T4.Build/BuildTemplateGenerator.cs | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/T4.Build/BuildTemplateGenerator.cs b/T4.Build/BuildTemplateGenerator.cs index a117e62..50d8d57 100644 --- a/T4.Build/BuildTemplateGenerator.cs +++ b/T4.Build/BuildTemplateGenerator.cs @@ -39,12 +39,12 @@ string LockPath return lockPath; } - } - + } + public new string OutputFile - { - get - { + { + get + { if (string.IsNullOrEmpty(base.OutputFile)) { if (ParsedTemplate == null) @@ -54,11 +54,11 @@ string LockPath foreach (var dt in ParsedTemplate.Directives) { if (dt.Name == "output") - ext = dt.Attributes.GetValueOrDefault("extension", ext); - } - base.OutputFile = Path.ChangeExtension(TemplateFile, ext); - } - + ext = dt.Attributes.GetValueOrDefault("extension", ext); + } + base.OutputFile = Path.ChangeExtension(TemplateFile, ext); + } + return base.OutputFile; } } @@ -114,7 +114,14 @@ public bool ProcessTemplate(bool skipUpToDate, out bool skipped) return true; } } - return ProcessTemplate(TemplateFile, OutputFile); + + var requestOutputFile = OutputFile; + var result = ProcessTemplate(TemplateFile, OutputFile); + if (requestOutputFile != OutputFile && File.Exists(OutputFile)) + { + File.Move(OutputFile, requestOutputFile, true); + } + return result; } }