diff options
author | David Karlaš <david.karlas@xamarin.com> | 2016-06-16 21:49:24 +0300 |
---|---|---|
committer | David Karlaš <david.karlas@xamarin.com> | 2016-06-16 22:53:54 +0300 |
commit | 7d150d2679974f99dd40220f6217609d8977b5d4 (patch) | |
tree | 37f475c92019e4f9356d8ac8bc720c632c247bfe /main/src/addins | |
parent | b72dc9869790192390ab5f40169b3c4c9f877b7c (diff) |
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" #>
Diffstat (limited to 'main/src/addins')
4 files changed, 17 insertions, 3 deletions
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); + }
}
}
|