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;