Beispiel #1
0
        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));
                }
            }
        }