public string Process() { using (AssemblyHelper.SubscribeResolveForAssembly(_options.AssemblyFilePath)) { var appDomainConfig = $"{_options.AssemblyFilePath}.config"; if (!File.Exists(appDomainConfig)) { appDomainConfig = null; } var appDomain = new AppDomainManager(_options.AssemblyFilePath, appDomainConfig, false, null); var specFlowVersion = GetSpecFlowVersion(); var discovererType = typeof(SpecFlowV30P220Discoverer); // assume recent version if (specFlowVersion != null) { var versionNumber = ((specFlowVersion.FileMajorPart * 100) + specFlowVersion.FileMinorPart) * 1000 + specFlowVersion.FileBuildPart; if (versionNumber >= 3_00_220) { discovererType = typeof(SpecFlowV30P220Discoverer); } else if (versionNumber >= 3_00_000) { discovererType = typeof(SpecFlowV30Discoverer); } else if (versionNumber >= 2_02_000) { discovererType = typeof(SpecFlowV22Discoverer); } else if (versionNumber >= 2_01_000) { discovererType = typeof(SpecFlowV21Discoverer); } else if (versionNumber >= 2_00_000) { discovererType = typeof(SpecFlowV20Discoverer); } else if (versionNumber >= 1_09_000) { discovererType = typeof(SpecFlowV19Discoverer); } } appDomain.CreateObjectFrom <AssemblyHelper>(typeof(AssemblyHelper).Assembly.Location, typeof(AssemblyHelper).FullName, _options.TargetFolder); appDomain.CreateObjectFrom <AssemblyHelper>(typeof(AssemblyHelper).Assembly.Location, typeof(AssemblyHelper).FullName, _options.ConnectorFolder); using (var discoverer = appDomain.CreateObject <IRemotingSpecFlowDiscoverer>(discovererType.Assembly.GetName(), discovererType.FullName)) { return(discoverer.Discover(_options.AssemblyFilePath, _options.ConfigFilePath)); } } }
public string Process() { using (AssemblyHelper.SubscribeResolveForAssembly(_options.AssemblyFilePath)) { var appDomain = new AppDomainManager(_options.AssemblyFilePath, _options.ConfigFilePath, false, null); var specFlowVersion = GetSpecFlowVersion(); var discovererType = typeof(SpecFlowV2020Discoverer); if (specFlowVersion != null) { switch (specFlowVersion.FileMajorPart * 1000 + specFlowVersion.FileMinorPart * 10) { case 1090: discovererType = typeof(SpecFlowV1090Discoverer); break; case 2000: discovererType = typeof(SpecFlowV2000Discoverer); break; case 2010: discovererType = typeof(SpecFlowV2010Discoverer); break; case 3000: discovererType = typeof(SpecFlowV3000Discoverer); break; } } appDomain.CreateObjectFrom <AssemblyHelper>(typeof(AssemblyHelper).Assembly.Location, typeof(AssemblyHelper).FullName, _options.TargetFolder); appDomain.CreateObjectFrom <AssemblyHelper>(typeof(AssemblyHelper).Assembly.Location, typeof(AssemblyHelper).FullName, _options.ConnectorFolder); using (var discoverer = appDomain.CreateObject <IRemotingSpecFlowDiscoverer>(discovererType.Assembly.GetName(), discovererType.FullName)) { return(discoverer.Discover(_options.AssemblyFilePath, _options.ConfigFilePath)); } } }