From 7d150d2679974f99dd40220f6217609d8977b5d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?David=20Karlas=CC=8C?= Date: Thu, 16 Jun 2016 20:49:24 +0200 Subject: Bug 41738 - The 'TextTemplatingFileGenerator' code generator crashed: Object reference not set to an instance of an object ProjectFileTemplatingHost.cs: Replacing properties like $(SolutionDir) with correct value when resolving assembly path(https://msdn.microsoft.com/en-us/library/bb126478.aspx#Anchor_3) MonoDevelopTemplatingHost.cs: Apperently it's legal to say "System.dll" in T4, which GAC lookup doesn't like TemplatingEngine.cs: /noconfig is needed so mcs.exe(or csc.exe) doesn't report error CS1703(An assembly `System' with the same identity has already been imported. Consider removing one of the references) for System.dll TemplateGenerator.cs: By adding reference by FullName we let framework resolve full path, which allows deduplication of System.dll reference in case when user also specifies <#@ assembly name="System.dll" #> --- .../Mono.TextTemplating/Mono.TextTemplating/TemplateGenerator.cs | 2 +- .../Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs | 5 ++++- .../MonoDevelop.TextTemplating/MonoDevelopTemplatingHost.cs | 6 +++++- .../MonoDevelop.TextTemplating/ProjectFileTemplatingHost.cs | 7 +++++++ 4 files changed, 17 insertions(+), 3 deletions(-) (limited to 'main/src/addins/TextTemplating') diff --git a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplateGenerator.cs b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplateGenerator.cs index 5c661ed7bb..8bf749d932 100644 --- a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplateGenerator.cs +++ b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplateGenerator.cs @@ -62,7 +62,7 @@ namespace Mono.TextTemplating public TemplateGenerator () { Refs.Add (typeof (TextTransformation).Assembly.Location); - Refs.Add (typeof(Uri).Assembly.Location); + Refs.Add (typeof(Uri).Assembly.FullName); Imports.Add ("System"); } diff --git a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs index 69a6f6a5c7..7672696a6b 100644 --- a/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs +++ b/main/src/addins/TextTemplating/Mono.TextTemplating/Mono.TextTemplating/TemplatingEngine.cs @@ -167,7 +167,10 @@ namespace Mono.TextTemplating if (settings.Debug) pars.TempFiles.KeepFiles = true; - + if (string.IsNullOrWhiteSpace (pars.CompilerOptions)) + pars.CompilerOptions = "/noconfig"; + else if (!pars.CompilerOptions.Contains ("/noconfig")) + pars.CompilerOptions = "/noconfig " + pars.CompilerOptions; return settings.Provider.CompileAssemblyFromDom (pars, ccu); } diff --git a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelopTemplatingHost.cs b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelopTemplatingHost.cs index 1371b950ab..d7dbbdd506 100644 --- a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelopTemplatingHost.cs +++ b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/MonoDevelopTemplatingHost.cs @@ -70,8 +70,12 @@ namespace MonoDevelop.TextTemplating var fx = Runtime.SystemAssemblyService.GetTargetFramework (TargetFrameworkMoniker.NET_4_5); var ctx = Runtime.SystemAssemblyService.CurrentRuntime.AssemblyContext; - var fullname = ctx.FindInstalledAssembly (assemblyReference, null, fx); + if (assemblyReference.EndsWith (".dll", StringComparison.OrdinalIgnoreCase)) + assemblyReference = assemblyReference.Remove (assemblyReference.Length - 4); + var fullname = ctx.FindInstalledAssembly (assemblyReference, null, fx); + if (fullname == null) + return null; var asm = ctx.GetAssemblyFromFullName (fullname, null, fx); if (asm != null) return asm.Location; diff --git a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/ProjectFileTemplatingHost.cs b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/ProjectFileTemplatingHost.cs index e416da68c6..5718f3ca6c 100644 --- a/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/ProjectFileTemplatingHost.cs +++ b/main/src/addins/TextTemplating/MonoDevelop.TextTemplating/ProjectFileTemplatingHost.cs @@ -27,6 +27,7 @@ using MonoDevelop.Core; using MonoDevelop.Core.StringParsing; using MonoDevelop.Projects; +using MonoDevelop.Ide; namespace MonoDevelop.TextTemplating { @@ -46,5 +47,11 @@ namespace MonoDevelop.TextTemplating var model = file.Project.GetStringTagModel (activeConfiguration); return StringParserService.Parse (s, model); } + + protected override string ResolveAssemblyReference (string assemblyReference) + { + assemblyReference = StringParserService.Parse (assemblyReference, IdeApp.Workbench.GetStringTagModel ()); + return base.ResolveAssemblyReference (assemblyReference); + } } } -- cgit v1.2.3