예제 #1
0
        public Config()
        {
            // KeepBenchmarkFiles = true;

            //Add(Job.Default.With(CsProjClassicNetToolchain.Net472));
            Add(Job.Default.With(CsProjClassicNetToolchain.From("net48")));
            //Add(Job.Default.With(CsProjCoreToolchain.Current.Value));

            //var toolchain = CsProjCoreToolchain.Current.Value;
            //var jobWithCustomConfiguration = Job.Dry.WithCustomBuildConfiguration("CUSTOM").With(toolchain);
            //Add(jobWithCustomConfiguration);
        }
        internal static IToolchain GetToolchain(this Runtime runtime, Descriptor descriptor = null, bool preferMsBuildToolchains = false)
        {
            switch (runtime)
            {
            case ClrRuntime clrRuntime:
                if (RuntimeInformation.IsNetCore || preferMsBuildToolchains)
                {
                    return(clrRuntime.RuntimeMoniker != RuntimeMoniker.NotRecognized
                            ? GetToolchain(clrRuntime.RuntimeMoniker)
                            : CsProjClassicNetToolchain.From(clrRuntime.MsBuildMoniker));
                }

                return(RoslynToolchain.Instance);

            case MonoRuntime mono:
                if (!string.IsNullOrEmpty(mono.AotArgs))
                {
                    return(MonoAotToolchain.Instance);
                }

                return(RoslynToolchain.Instance);

            case CoreRuntime coreRuntime:
                if (descriptor != null && descriptor.Type.Assembly.IsLinqPad())
                {
                    return(InProcessEmitToolchain.Instance);
                }
                if (coreRuntime.RuntimeMoniker != RuntimeMoniker.NotRecognized)
                {
                    return(GetToolchain(coreRuntime.RuntimeMoniker));
                }

                return(CsProjCoreToolchain.From(new DotNetCli.NetCoreAppSettings(coreRuntime.MsBuildMoniker, null, coreRuntime.Name)));

            case CoreRtRuntime coreRtRuntime:
                return(coreRtRuntime.RuntimeMoniker != RuntimeMoniker.NotRecognized
                            ? GetToolchain(coreRtRuntime.RuntimeMoniker)
                            : CoreRtToolchain.CreateBuilder().UseCoreRtNuGet().TargetFrameworkMoniker(coreRtRuntime.MsBuildMoniker).ToToolchain());

            default:
                throw new ArgumentOutOfRangeException(nameof(runtime), runtime, "Runtime not supported");
            }
        }
예제 #3
0
        internal static string GetRuntimeVersion()
        {
#if CLASSIC
            if (IsMono())
            {
                var monoRuntimeType = Type.GetType("Mono.Runtime");
                var monoDisplayName = monoRuntimeType?.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
                if (monoDisplayName != null)
                {
                    string version = monoDisplayName.Invoke(null, null)?.ToString();
                    if (version != null)
                    {
                        int bracket1 = version.IndexOf('('), bracket2 = version.IndexOf(')');
                        if (bracket1 != -1 && bracket2 != -1)
                        {
                            string comment      = version.Substring(bracket1 + 1, bracket2 - bracket1 - 1);
                            var    commentParts = comment.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                            if (commentParts.Length > 2)
                            {
                                version = version.Substring(0, bracket1) + "(" + commentParts[0] + " " + commentParts[1] + ")";
                            }
                        }
                    }
                    return("Mono " + version);
                }
            }

            string frameworkVersion = CsProjClassicNetToolchain.GetCurrentNetFrameworkVersion();
            string clrVersion       = System.Environment.Version.ToString();
            return($".NET Framework {frameworkVersion} (CLR {clrVersion})");
#else
            var runtimeVersion = GetNetCoreVersion() ?? "?";

            var coreclrAssemblyInfo = System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(object).GetTypeInfo().Assembly.Location);
            var corefxAssemblyInfo  = System.Diagnostics.FileVersionInfo.GetVersionInfo(typeof(System.Text.RegularExpressions.Regex).GetTypeInfo().Assembly.Location);

            return($".NET Core {runtimeVersion} (CoreCLR {coreclrAssemblyInfo.FileVersion}, CoreFX {corefxAssemblyInfo.FileVersion})");
#endif
        }
예제 #4
0
        .AsDefault();         // this way we tell BDN that it's a default config which can be overwritten

        /// <summary>
        /// we need our own toolchain because MSBuild by default does not copy recursive native dependencies to the output
        /// </summary>
        private IToolchain CreateToolchain()
        {
            TimeSpan timeout = TimeSpan.FromMinutes(5);

#if NETFRAMEWORK
            var tfm    = "net461";
            var csProj = CsProjClassicNetToolchain.From(tfm, timeout: timeout);
#else
            var settings = AppDomain.CurrentDomain.GetData("FX_PRODUCT_VERSION") == null
                ? NetCoreAppSettings.NetCoreApp21 : NetCoreAppSettings.NetCoreApp31;

            settings = settings.WithTimeout(timeout);

            var tfm    = settings.TargetFrameworkMoniker;
            var csProj = CsProjCoreToolchain.From(settings);
#endif
            return(new Toolchain(
                       tfm,
                       new ProjectGenerator(tfm), // custom generator that copies native dependencies
                       csProj.Builder,
                       csProj.Executor));
        }
        internal static string GetRuntimeVersion()
        {
#if CLASSIC
            if (IsMono())
            {
                var monoRuntimeType = Type.GetType("Mono.Runtime");
                var monoDisplayName = monoRuntimeType?.GetMethod("GetDisplayName", BindingFlags.NonPublic | BindingFlags.Static);
                if (monoDisplayName != null)
                {
                    string version = monoDisplayName.Invoke(null, null)?.ToString();
                    if (version != null)
                    {
                        int bracket1 = version.IndexOf('('), bracket2 = version.IndexOf(')');
                        if (bracket1 != -1 && bracket2 != -1)
                        {
                            string comment      = version.Substring(bracket1 + 1, bracket2 - bracket1 - 1);
                            var    commentParts = comment.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries);
                            if (commentParts.Length > 2)
                            {
                                version = version.Substring(0, bracket1) + "(" + commentParts[0] + " " + commentParts[1] + ")";
                            }
                        }
                    }
                    return("Mono " + version);
                }
            }

            string frameworkVersion = CsProjClassicNetToolchain.GetCurrentNetFrameworkVersion();
            string clrVersion       = System.Environment.Version.ToString();
            return($".NET Framework {frameworkVersion} (CLR {clrVersion})");
#else
            var    runtimeVersion   = GetNetCoreVersion() ?? "?";
            string frameworkVersion = System.Runtime.InteropServices.RuntimeInformation.FrameworkDescription.Replace(".NET Core ", "");
            return($".NET Core {runtimeVersion} (Framework {frameworkVersion})");
#endif
        }
예제 #6
0
        public NetFramework472JobAttribute()
        {
            var job = Job.Default.With(Runtime.Clr).With(Jit.RyuJit).With(Platform.X64).With(CsProjClassicNetToolchain.From("net472"));

            Config = ManualConfig.CreateEmpty().With(job);
        }