Beispiel #1
0
        private LibraryStub ReadOneLibrary(ref UnifiedJsonReader reader)
        {
            string hash        = null;
            string type        = null;
            bool   serviceable = false;
            string path        = null;
            string hashPath    = null;
            string runtimeStoreManifestName = null;

            reader.ReadStartObject();

            while (reader.Read() && reader.IsTokenTypeProperty())
            {
                switch (reader.GetStringValue())
                {
                case DependencyContextStrings.Sha512PropertyName:
                    hash = reader.ReadAsString();
                    break;

                case DependencyContextStrings.TypePropertyName:
                    type = reader.ReadAsString();
                    break;

                case DependencyContextStrings.ServiceablePropertyName:
                    serviceable = reader.ReadAsBoolean(defaultValue: false);
                    break;

                case DependencyContextStrings.PathPropertyName:
                    path = reader.ReadAsString();
                    break;

                case DependencyContextStrings.HashPathPropertyName:
                    hashPath = reader.ReadAsString();
                    break;

                case DependencyContextStrings.RuntimeStoreManifestPropertyName:
                    runtimeStoreManifestName = reader.ReadAsString();
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            reader.CheckEndObject();

            return(new LibraryStub()
            {
                Hash = hash,
                Type = Pool(type),
                Serviceable = serviceable,
                Path = path,
                HashPath = hashPath,
                RuntimeStoreManifestName = runtimeStoreManifestName
            });
        }
Beispiel #2
0
        private static List <string> ReadPropertyNames(ref UnifiedJsonReader reader)
        {
            var runtimes = new List <string>();

            reader.ReadStartObject();

            while (reader.Read() && reader.IsTokenTypeProperty())
            {
                string libraryName = reader.GetStringValue();
                reader.Skip();

                runtimes.Add(libraryName);
            }

            reader.CheckEndObject();

            return(runtimes);
        }
Beispiel #3
0
        private DependencyContext ReadCore(UnifiedJsonReader reader)
        {
            reader.ReadStartObject();

            string runtime           = string.Empty;
            string framework         = string.Empty;
            bool   isPortable        = true;
            string runtimeTargetName = null;
            string runtimeSignature  = null;

            CompilationOptions compilationOptions             = null;
            List <Target>      targets                        = null;
            Dictionary <string, LibraryStub> libraryStubs     = null;
            List <RuntimeFallbacks>          runtimeFallbacks = null;

            while (reader.Read() && reader.IsTokenTypeProperty())
            {
                switch (reader.GetStringValue())
                {
                case DependencyContextStrings.RuntimeTargetPropertyName:
                    ReadRuntimeTarget(ref reader, out runtimeTargetName, out runtimeSignature);
                    break;

                case DependencyContextStrings.CompilationOptionsPropertName:
                    compilationOptions = ReadCompilationOptions(ref reader);
                    break;

                case DependencyContextStrings.TargetsPropertyName:
                    targets = ReadTargets(ref reader);
                    break;

                case DependencyContextStrings.LibrariesPropertyName:
                    libraryStubs = ReadLibraries(ref reader);
                    break;

                case DependencyContextStrings.RuntimesPropertyName:
                    runtimeFallbacks = ReadRuntimes(ref reader);
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            if (compilationOptions == null)
            {
                compilationOptions = CompilationOptions.Default;
            }

            Target runtimeTarget = SelectRuntimeTarget(targets, runtimeTargetName);

            runtimeTargetName = runtimeTarget?.Name;

            if (runtimeTargetName != null)
            {
                int separatorIndex = runtimeTargetName.IndexOf(DependencyContextStrings.VersionSeparator);
                if (separatorIndex > -1 && separatorIndex < runtimeTargetName.Length)
                {
                    runtime    = runtimeTargetName.Substring(separatorIndex + 1);
                    framework  = runtimeTargetName.Substring(0, separatorIndex);
                    isPortable = false;
                }
                else
                {
                    framework = runtimeTargetName;
                }
            }

            Target compileTarget = null;

            Target ridlessTarget = targets.FirstOrDefault(t => !IsRuntimeTarget(t.Name));

            if (ridlessTarget != null)
            {
                compileTarget = ridlessTarget;
                if (runtimeTarget == null)
                {
                    runtimeTarget = compileTarget;
                    framework     = ridlessTarget.Name;
                }
            }

            if (runtimeTarget == null)
            {
                throw new FormatException("No runtime target found");
            }

            return(new DependencyContext(
                       new TargetInfo(framework, runtime, runtimeSignature, isPortable),
                       compilationOptions,
                       CreateLibraries(compileTarget?.Libraries, false, libraryStubs).Cast <CompilationLibrary>().ToArray(),
                       CreateLibraries(runtimeTarget.Libraries, true, libraryStubs).Cast <RuntimeLibrary>().ToArray(),
                       runtimeFallbacks ?? Enumerable.Empty <RuntimeFallbacks>()));
        }
Beispiel #4
0
        private TargetLibrary ReadTargetLibrary(ref UnifiedJsonReader reader, string targetLibraryName)
        {
            IEnumerable <Dependency>      dependencies   = null;
            List <RuntimeFile>            runtimes       = null;
            List <RuntimeFile>            natives        = null;
            List <string>                 compilations   = null;
            List <RuntimeTargetEntryStub> runtimeTargets = null;
            List <ResourceAssembly>       resources      = null;
            bool?compileOnly = null;

            reader.ReadStartObject();

            while (reader.Read() && reader.IsTokenTypeProperty())
            {
                switch (reader.GetStringValue())
                {
                case DependencyContextStrings.DependenciesPropertyName:
                    dependencies = ReadTargetLibraryDependencies(ref reader);
                    break;

                case DependencyContextStrings.RuntimeAssembliesKey:
                    runtimes = ReadRuntimeFiles(ref reader);
                    break;

                case DependencyContextStrings.NativeLibrariesKey:
                    natives = ReadRuntimeFiles(ref reader);
                    break;

                case DependencyContextStrings.CompileTimeAssembliesKey:
                    compilations = ReadPropertyNames(ref reader);
                    break;

                case DependencyContextStrings.RuntimeTargetsPropertyName:
                    runtimeTargets = ReadTargetLibraryRuntimeTargets(ref reader);
                    break;

                case DependencyContextStrings.ResourceAssembliesPropertyName:
                    resources = ReadTargetLibraryResources(ref reader);
                    break;

                case DependencyContextStrings.CompilationOnlyPropertyName:
                    compileOnly = reader.ReadAsNullableBoolean();
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            reader.CheckEndObject();

            return(new TargetLibrary()
            {
                Name = targetLibraryName,
                Dependencies = dependencies ?? Enumerable.Empty <Dependency>(),
                Runtimes = runtimes,
                Natives = natives,
                Compilations = compilations,
                RuntimeTargets = runtimeTargets,
                Resources = resources,
                CompileOnly = compileOnly
            });
        }
Beispiel #5
0
        private static CompilationOptions ReadCompilationOptions(ref UnifiedJsonReader reader)
        {
            IEnumerable <string> defines = null;
            string languageVersion       = null;
            string platform                 = null;
            bool?  allowUnsafe              = null;
            bool?  warningsAsErrors         = null;
            bool?  optimize                 = null;
            string keyFile                  = null;
            bool?  delaySign                = null;
            bool?  publicSign               = null;
            string debugType                = null;
            bool?  emitEntryPoint           = null;
            bool?  generateXmlDocumentation = null;

            reader.ReadStartObject();

            while (reader.Read() && reader.IsTokenTypeProperty())
            {
                switch (reader.GetStringValue())
                {
                case DependencyContextStrings.DefinesPropertyName:
                    defines = reader.ReadStringArray();
                    break;

                case DependencyContextStrings.LanguageVersionPropertyName:
                    languageVersion = reader.ReadAsString();
                    break;

                case DependencyContextStrings.PlatformPropertyName:
                    platform = reader.ReadAsString();
                    break;

                case DependencyContextStrings.AllowUnsafePropertyName:
                    allowUnsafe = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.WarningsAsErrorsPropertyName:
                    warningsAsErrors = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.OptimizePropertyName:
                    optimize = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.KeyFilePropertyName:
                    keyFile = reader.ReadAsString();
                    break;

                case DependencyContextStrings.DelaySignPropertyName:
                    delaySign = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.PublicSignPropertyName:
                    publicSign = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.DebugTypePropertyName:
                    debugType = reader.ReadAsString();
                    break;

                case DependencyContextStrings.EmitEntryPointPropertyName:
                    emitEntryPoint = reader.ReadAsNullableBoolean();
                    break;

                case DependencyContextStrings.GenerateXmlDocumentationPropertyName:
                    generateXmlDocumentation = reader.ReadAsNullableBoolean();
                    break;

                default:
                    reader.Skip();
                    break;
                }
            }

            reader.CheckEndObject();

            return(new CompilationOptions(
                       defines ?? Enumerable.Empty <string>(),
                       languageVersion,
                       platform,
                       allowUnsafe,
                       warningsAsErrors,
                       optimize,
                       keyFile,
                       delaySign,
                       publicSign,
                       debugType,
                       emitEntryPoint,
                       generateXmlDocumentation));
        }