Пример #1
0
        public override bool Execute()
        {
            _packageItems = Files.Select(f => new PackageItem(f));
            var packageDlls  = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase));
            var packagePaths = _packageItems.Select(pi => pi.TargetPath);
            var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi));

            if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson))
            {
                Log.LogError("Could not load runtime file: {0}", RuntimeJson);
                RuntimeJson = null;
            }

            NuGetAssetResolver resolver         = new NuGetAssetResolver(RuntimeJson, packagePaths);
            NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders);

            List <ITaskItem> newItems = new List <ITaskItem>();

            // determine if an inbox placeholder obscures an OOB implementation.
            foreach (var oobFx in OOBFrameworks)
            {
                NuGetFramework targetFramework = NuGetFramework.Parse(oobFx);

                // first see if any dlls are explicitly marked for this framework.
                IEnumerable <string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredCompileFolders.Any())
                {
                    // no dlls were marked, resolve without placeholders to determine what to promote.
                    var compileItems         = resolver.GetCompileItems(targetFramework);
                    var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework);
                    obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib");
                }

                var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx);
                newItems.AddRange(promotedCompileItems);

                // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676
                string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib";
                IEnumerable <string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredRuntimeFolders.Any())
                {
                    var runtimeItems         = resolver.GetRuntimeItems(targetFramework, RuntimeId);
                    var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId);
                    obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder);
                }

                var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx);
                newItems.AddRange(promotedRuntimeItems);
            }

            AdditionalFiles = newItems.ToArray();

            return(!Log.HasLoggedErrors);
        }
Пример #2
0
        public override bool Execute()
        {
            _packageItems = Files.Select(f => new PackageItem(f));
            var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase));
            var packagePaths = _packageItems.Select(pi => pi.TargetPath);
            var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi));

            if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson))
            {
                Log.LogError("Could not load runtime file: {0}", RuntimeJson);
                RuntimeJson = null;
            }

            NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths);
            NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders);

            List<ITaskItem> newItems = new List<ITaskItem>();

            // determine if an inbox placeholder obscures an OOB implementation.
            foreach (var oobFx in OOBFrameworks)
            {
                NuGetFramework targetFramework = NuGetFramework.Parse(oobFx);

                // first see if any dlls are explicitly marked for this framework.
                IEnumerable<string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredCompileFolders.Any())
                {
                    // no dlls were marked, resolve without placeholders to determine what to promote.
                    var compileItems = resolver.GetCompileItems(targetFramework);
                    var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework);
                    obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib");
                }

                var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx);
                newItems.AddRange(promotedCompileItems);

                // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676
                string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib";
                IEnumerable<string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredRuntimeFolders.Any())
                {
                    var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId);
                    var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId);
                    obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder);
                }

                var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx);
                newItems.AddRange(promotedRuntimeItems);
            }

            AdditionalFiles = newItems.ToArray();

            return !Log.HasLoggedErrors;
        }
Пример #3
0
        public override bool Execute()
        {
            _packageItems = Files.Select(f => new PackageItem(f));
            var packageDlls = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase));
            var packagePaths = _packageItems.Select(pi => pi.TargetPath);
            var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi));

            if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson))
            {
                Log.LogError("Could not load runtime file: {0}", RuntimeJson);
                RuntimeJson = null;
            }

            NuGetAssetResolver resolver = new NuGetAssetResolver(RuntimeJson, packagePaths);
            NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders);

            List<ITaskItem> newItems = new List<ITaskItem>();

            // determine if an inbox placeholder obscures an OOB implementation.
            foreach (var oobFramework in OOBFrameworks)
            {
                var oobFx = oobFramework.ItemSpec;
                NuGetFramework targetFramework = NuGetFramework.Parse(oobFx);

                // first see if any dlls are explicitly marked for this framework.
                IEnumerable<string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredCompileFolders.Any())
                {
                    // no dlls were marked, resolve without placeholders to determine what to promote.
                    var compileItems = resolver.GetCompileItems(targetFramework);
                    var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework);
                    obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib");
                }

                var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx);
                newItems.AddRange(promotedCompileItems);

                // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676
                string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib";
                IEnumerable<string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredRuntimeFolders.Any())
                {
                    var runtimeItems = resolver.GetRuntimeItems(targetFramework, RuntimeId);
                    var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId);
                    obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder);
                }

                var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx);

                // If we promoted compile assets but couldn't find any runtime assets to promote we could 
                // be missing dependencies since a dependency group will be created for the compile assets
                // that may differ from the runtime assets.
                if (promotedCompileItems.Any() && !promotedRuntimeItems.Any())
                {
                    string oobFxRid = oobFramework.GetMetadata("RuntimeId") ?? RuntimeId;

                    // find the actual implementation that will be used.
                    var runtimeItems = resolver.GetRuntimeItems(targetFramework, oobFxRid);
                    var promotedRuntimeFolders = GetRuntimeAssetFoldersForPromotion(runtimeItems, targetFramework, oobFx);

                    // use null here to indicate that this should not actually go into the package but only be used for 
                    // dependency harvesting
                    promotedRuntimeItems = ExpandAssetFoldersToItems(promotedRuntimeFolders, "$none$", targetFrameworkName: oobFx);
                }

                newItems.AddRange(promotedRuntimeItems);
            }

            AdditionalFiles = newItems.ToArray();

            return !Log.HasLoggedErrors;
        }
Пример #4
0
        public override bool Execute()
        {
            _packageItems = Files.Select(f => new PackageItem(f));
            var packageDlls  = _packageItems.Where(pi => Path.GetExtension(pi.SourcePath).Equals(".dll", StringComparison.OrdinalIgnoreCase));
            var packagePaths = _packageItems.Select(pi => pi.TargetPath);
            var packagePathsWithoutPlaceHolders = packagePaths.Where(pi => !NuGetAssetResolver.IsPlaceholder(pi));

            if (!String.IsNullOrEmpty(RuntimeJson) && !File.Exists(RuntimeJson))
            {
                Log.LogError("Could not load runtime file: {0}", RuntimeJson);
                RuntimeJson = null;
            }

            NuGetAssetResolver resolver         = new NuGetAssetResolver(RuntimeJson, packagePaths);
            NuGetAssetResolver obscuredResolver = new NuGetAssetResolver(RuntimeJson, packagePathsWithoutPlaceHolders);

            List <ITaskItem> newItems = new List <ITaskItem>();

            // determine if an inbox placeholder obscures an OOB implementation.
            foreach (var oobFramework in OOBFrameworks)
            {
                var            oobFx           = oobFramework.ItemSpec;
                NuGetFramework targetFramework = NuGetFramework.Parse(oobFx);

                // first see if any dlls are explicitly marked for this framework.
                IEnumerable <string> obscuredCompileFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkRef") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredCompileFolders.Any())
                {
                    // no dlls were marked, resolve without placeholders to determine what to promote.
                    var compileItems         = resolver.GetCompileItems(targetFramework);
                    var obscuredCompileItems = obscuredResolver.GetCompileItems(targetFramework);
                    obscuredCompileFolders = GetObscuredAssetFolders(compileItems, obscuredCompileItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: "ref", ignoredAssetFolder: "lib");
                }

                var promotedCompileItems = ExpandAssetFoldersToItems(obscuredCompileFolders, targetAssetFolder: "ref", targetFrameworkName: oobFx);
                newItems.AddRange(promotedCompileItems);

                // don't use 'any' in paths due to https://github.com/NuGet/Home/issues/1676
                string targetLibFolder = !String.IsNullOrEmpty(RuntimeId) && RuntimeId != "any" ? $"runtimes/{RuntimeId}/lib" : "lib";
                IEnumerable <string> obscuredRuntimeFolders = packageDlls.Where(pi => pi.OriginalItem.GetMetadata("EnsureOOBFrameworkLib") == oobFx).Select(pi => pi.TargetDirectory);

                if (!obscuredRuntimeFolders.Any())
                {
                    var runtimeItems         = resolver.GetRuntimeItems(targetFramework, RuntimeId);
                    var obscuredRuntimeItems = obscuredResolver.GetRuntimeItems(targetFramework, RuntimeId);
                    obscuredRuntimeFolders = GetObscuredAssetFolders(runtimeItems, obscuredRuntimeItems, targetFramework, targetFrameworkName: oobFx, expectedAssetFolder: targetLibFolder);
                }

                var promotedRuntimeItems = ExpandAssetFoldersToItems(obscuredRuntimeFolders, targetLibFolder, targetFrameworkName: oobFx);

                // If we promoted compile assets but couldn't find any runtime assets to promote we could
                // be missing dependencies since a dependency group will be created for the compile assets
                // that may differ from the runtime assets.
                if (promotedCompileItems.Any() && !promotedRuntimeItems.Any())
                {
                    string oobFxRid = oobFramework.GetMetadata("RuntimeId") ?? RuntimeId;

                    // find the actual implementation that will be used.
                    var runtimeItems           = resolver.GetRuntimeItems(targetFramework, oobFxRid);
                    var promotedRuntimeFolders = GetRuntimeAssetFoldersForPromotion(runtimeItems, targetFramework, oobFx);

                    // use null here to indicate that this should not actually go into the package but only be used for
                    // dependency harvesting
                    promotedRuntimeItems = ExpandAssetFoldersToItems(promotedRuntimeFolders, "$none$", targetFrameworkName: oobFx);
                }

                newItems.AddRange(promotedRuntimeItems);
            }

            AdditionalFiles = newItems.ToArray();

            return(!Log.HasLoggedErrors);
        }