private Type GetProviderDesignTimeServices(string provider, bool throwOnError) { Assembly providerAssembly; try { providerAssembly = Assembly.Load(new AssemblyName(provider)); } catch (Exception ex) { if (!throwOnError) { return(null); } throw new OperationException(DesignStrings.CannotFindRuntimeProviderAssembly(provider), ex); } var providerServicesAttribute = providerAssembly.GetCustomAttribute <DesignTimeProviderServicesAttribute>(); if (providerServicesAttribute == null) { if (!throwOnError) { return(null); } throw new InvalidOperationException( DesignStrings.CannotFindDesignTimeProviderAssemblyAttribute( nameof(DesignTimeProviderServicesAttribute), provider)); } Assembly designTimeProviderAssembly; try { designTimeProviderAssembly = Assembly.Load(new AssemblyName(providerServicesAttribute.AssemblyName)); } catch (Exception ex) when(ex is FileNotFoundException || ex is FileLoadException || ex is BadImageFormatException) { if (!throwOnError) { return(null); } throw new OperationException( DesignStrings.CannotFindDesignTimeProviderAssembly(providerServicesAttribute.PackageName), ex); } return(designTimeProviderAssembly.GetType( providerServicesAttribute.TypeName, throwOnError: true, ignoreCase: false)); }
private void ConfigureProviderServices(string provider, IServiceCollection services, bool throwOnError = false) { _reporter.WriteVerbose(DesignStrings.FindingProviderServices(provider)); Assembly providerAssembly; try { providerAssembly = Assembly.Load(new AssemblyName(provider)); } catch (Exception ex) { var message = DesignStrings.CannotFindRuntimeProviderAssembly(provider); if (!throwOnError) { _reporter.WriteVerbose(message); return; } throw new OperationException(message, ex); } var providerServicesAttribute = providerAssembly.GetCustomAttribute <DesignTimeProviderServicesAttribute>(); if (providerServicesAttribute == null) { var message = DesignStrings.CannotFindDesignTimeProviderAssemblyAttribute( nameof(DesignTimeProviderServicesAttribute), provider); if (!throwOnError) { _reporter.WriteVerbose(message); return; } throw new InvalidOperationException(message); } var designTimeServicesType = providerAssembly.GetType( providerServicesAttribute.TypeName, throwOnError: true, ignoreCase: false); _reporter.WriteVerbose(DesignStrings.UsingProviderServices(provider)); ConfigureDesignTimeServices(designTimeServicesType, services); }