private async Task <AssemblyData?> GetAssemblyDataAsync(AssemblyLocation location)
        {
            Task <byte[]?> dll = _contentFileReader.ReadBytesOrNullAsync(location.DllPath);

            Task <byte[]?> pdb = Debugger.IsAttached && location.PdbPath != null
                ? _contentFileReader.ReadBytesOrNullAsync(location.PdbPath)
                : Task.FromResult <byte[]?>(null);

            await Task.WhenAll(dll, pdb).ConfigureAwait(false);

            var dllBytes = dll.Result;
            var pdbBytes = pdb.Result;

            if (dllBytes == null)
            {
                return(null);
            }

            return(new AssemblyData(dllBytes, pdbBytes));
        }
Ejemplo n.º 2
0
        private async Task ReadAllManifests()
        {
            var manifestDataTasks = new Dictionary <string, Task <byte[]?> >();
            var manifestPaths     = _manifestLocator.GetManifestPaths().Except(_loadedPaths.Keys);

            foreach (var path in manifestPaths)
            {
                manifestDataTasks.Add(path, _fileReader.ReadBytesOrNullAsync(path));
            }

            await Task.WhenAll(manifestDataTasks.Values.ToArray()).ConfigureAwait(false);

            var pathData = manifestDataTasks
                           .Select(i => new { Path = i.Key, Data = i.Value.Result })
                           .ToList();

            foreach (var path in pathData)
            {
                _loadedPaths.TryAdd(path.Path, path.Data);
            }

            var manifestModels = pathData
                                 .Where(i => i.Data != null)
                                 .ToDictionary(i => i.Path, i => JObject.Parse(Encoding.UTF8.GetString(i.Data !)));

            foreach (var keyValue in manifestModels)
            {
                foreach (var module in keyValue.Value)
                {
                    if (module.Value.Type != JTokenType.Object)
                    {
                        continue;
                    }

                    _loadedModules.TryAdd(module.Key, new ModuleManifest(module.Key, (JObject)module.Value));
                }
            }
        }