private async Task <IBuildServerAdapter> GetBuildServerAdapterAsync() { await TaskScheduler.Default; var buildServerSettings = _module().EffectiveSettings.BuildServer; if (!buildServerSettings.EnableIntegration.Value) { return(null); } var buildServerType = buildServerSettings.Type.Value; if (string.IsNullOrEmpty(buildServerType)) { return(null); } var exports = ManagedExtensibility.GetExports <IBuildServerAdapter, IBuildServerTypeMetadata>(); var export = exports.SingleOrDefault(x => x.Metadata.BuildServerType == buildServerType); if (export is not null) { try { var canBeLoaded = export.Metadata.CanBeLoaded; if (!string.IsNullOrEmpty(canBeLoaded)) { Debug.Write(export.Metadata.BuildServerType + " adapter could not be loaded: " + canBeLoaded); return(null); } var buildServerAdapter = export.Value; buildServerAdapter.Initialize(this, buildServerSettings.TypeSettings, () => { // To run the `StartSettingsDialog()` in the UI Thread _revisionGrid.Invoke((Action)(() => { _revisionGrid.UICommands.StartSettingsDialog(typeof(BuildServerIntegrationSettingsPage)); })); }, objectId => _revisionGrid.GetRevision(objectId) is not null); return(buildServerAdapter); } catch (InvalidOperationException ex) { Debug.Write(ex); // Invalid arguments, do not return a build server adapter } } return(null); }