public T4ReSharperEnvironment([NotNull] IVsEnvironmentStaticInformation vsEnvironmentInformation) { _vsEnvironmentInformation = vsEnvironmentInformation; switch (vsEnvironmentInformation.VsVersion2.Major) { case VsVersions.Vs2010: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 0)); CSharpLanguageLevel = CSharpLanguageLevel.CSharp40; _textTemplatingAssemblyNames = new[] { CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating", 10), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 10) }; break; case VsVersions.Vs2012: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 5)); CSharpLanguageLevel = CSharpLanguageLevel.CSharp50; _textTemplatingAssemblyNames = new[] { CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating", 11), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 11), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 10) }; break; case VsVersions.Vs2013: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 5)); CSharpLanguageLevel = CSharpLanguageLevel.CSharp50; _textTemplatingAssemblyNames = new[] { CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating", 12), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 11), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 10) }; break; case VsVersions.Vs2015: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 5)); const int vs2015Update2Build = 25123; CSharpLanguageLevel = vsEnvironmentInformation.VsVersion4.Build >= vs2015Update2Build ? CSharpLanguageLevel.CSharp60 : CSharpLanguageLevel.CSharp50; _textTemplatingAssemblyNames = new[] { CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating", 14), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 11), CreateGacAssemblyName("Microsoft.VisualStudio.TextTemplating.Interfaces", 10) }; break; case VsVersions.Vs2017: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 6)); CSharpLanguageLevel = CSharpLanguageLevel.CSharp70; _textTemplatingAssemblyNames = new[] { CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.15.0"), CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.Interfaces.11.0"), CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.Interfaces.10.0") }; break; case VsVersions.Vs2019: _targetFrameworkId = TargetFrameworkId.Create(FrameworkIdentifier.NetFramework, new Version(4, 7, 2)); CSharpLanguageLevel = CSharpLanguageLevel.CSharp73; _textTemplatingAssemblyNames = new[] { CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.15.0"), CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.Interfaces.11.0"), CreateDevEnvPublicAssemblyName(vsEnvironmentInformation, "Microsoft.VisualStudio.TextTemplating.Interfaces.10.0") }; break; default: _textTemplatingAssemblyNames = EmptyArray <string> .Instance; break; } }
private static string CreateDevEnvPublicAssemblyName([NotNull] IVsEnvironmentStaticInformation vsEnvironmentInformation, [NotNull] string name) => vsEnvironmentInformation .DevEnvInstallDir .Combine(RelativePath.Parse("PublicAssemblies\\" + name + ".dll")) .FullPath;