Ejemplo n.º 1
0
        private Assembly AssemblyResolve(Assembly targetAssembly, VSProject relatedProject, ResolveEventArgs args)
        {
            var      targetFramework = relatedProject.Properties.SingleOrDefault(p => p.Name == "TargetFramework").Value;
            var      runtimeTarget   = this.depsJsonObject.runtimeTarget.name;
            var      targets         = (object)this.depsJsonObject.targets;
            var      target          = targets.GetDynamicMemberValue <object>((string)runtimeTarget);
            var      targetPairs     = target.GetDynamicMemberNameValueDictionary();
            var      parts           = AssemblyExtensions.GetNameParts(args.Name);
            Assembly assembly        = null;

            if (!mscorlibLoaded)
            {
                var mscorlib   = targetAssembly.FindCoreAssembly(@"microsoft.netcore.app\2.1.0\ref\netcoreapp2.1\mscorlib.dll");
                var systemCore = targetAssembly.FindCoreAssembly(@"microsoft.netcore.app\2.1.0\ref\netcoreapp2.1\System.Core.dll");

                mscorlibLoaded = true;
            }

            foreach (var targetPair in targetPairs)
            {
                var targetValue = targetPair.Value;
                var compile     = targetValue.GetDynamicMemberValue <object>("compile");

                if (compile != null)
                {
                    var compilePairs = compile.GetDynamicMemberNameValueDictionary();

                    foreach (var compilePair in compilePairs)
                    {
                        var key = compilePair.Key;
                        var assemblyNameFile = key.Split("/").LastOrDefault();
                        var assemblyName     = Path.GetFileNameWithoutExtension(assemblyNameFile);

                        if (assemblyName == parts.AssemblyName)
                        {
                            var partialPath = targetPair.Key.BackSlashes() + @"\" + key.BackSlashes();
                            assembly = targetAssembly.FindCoreAssembly(partialPath);

                            if (assembly != null)
                            {
                                return(assembly);
                            }
                        }
                    }
                }
            }

            return(null);
        }