public void Pack(IPackingContext context)
        {
            var configsFolder = Path.Combine(context.PackingFolder, "configs");

            Directory.CreateDirectory(configsFolder);
            var configsFile   = Path.Combine(configsFolder, "Project.txt");
            var rootNamespace = "";
            //rootNamespace = context.RootNamespace;
            var configsContent = $@">
RootNamespace
{File.ReadAllText(rootNamespace)}
>";

            const int retryCount = 10;

            for (int i = 0; i < retryCount; i++)
            {
                try
                {
                    File.WriteAllText(configsFile, configsContent);
                    break;
                }
                catch (IOException)
                {
                    if (i == retryCount - 1)
                    {
                        throw;
                    }
                }
            }
        }
Esempio n. 2
0
        public void Pack(IPackingContext context)
        {
            var targetPackageFile = Path.GetFullPath(Path.Combine(context.PackageOutputPath,
                                                                  $"{context.PackageId}.{context.PackageVersion}.nupkg"));

            if (File.Exists(targetPackageFile))
            {
                context.Logger.Message($"发现{targetPackageFile}已经存在,将替换为新的文件");
                File.Delete(targetPackageFile);
            }

            var directory = Path.GetDirectoryName(targetPackageFile);

            if (directory == null)
            {
                throw new NotSupportedException("不支持相对路径。");
            }

            if (!Directory.Exists(directory))
            {
                Directory.CreateDirectory(directory);
            }

            // nuget 包就是一个 zip 压缩包
            ZipFile.CreateFromDirectory(context.PackingFolder, targetPackageFile);
        }
        public void Pack(IPackingContext context)
        {
            var buildAssetsFile = Path.Combine(context.PackingFolder, "build", $"{context.PackageId}.targets");

            // 从原始的项目文件中提取所有的 ItemGroup 中的节点,且节点类型在 IncludingItemTypes 中。

            // nuget 的源代码
            var sourceReferenceSourceFolder = @"$(MSBuildThisFileDirectory)..\src\";

            // 读取文件
            var buildFile = File.ReadAllText(buildAssetsFile);

            buildFile = ReplaceString(context.PackagedProjectFile, buildFile, context.PackageGuid,
                                      sourceReferenceSourceFolder, false,
                                      "<!--替换ItemGroup-->", "<!--替换XmlItemGroup-->");

            // 本地的代码,用于调试本地的代码

            sourceReferenceSourceFolder = $@"$({context.PackageGuid}SourceFolder)\";

            buildFile = ReplaceString(context.PackagedProjectFile, buildFile, context.PackageGuid,
                                      sourceReferenceSourceFolder, true,
                                      "<!--替换 SOURCE_REFERENCE ItemGroup-->", "<!--替换 SOURCE_REFERENCE XmlItemGroup-->");

            // 用户可以选择使用 nuget 源代码,也可以选择使用自己的代码,所以就需要使用两个不同的值

            // 写入文件
            File.WriteAllText(buildAssetsFile, buildFile);
        }
Esempio n. 4
0
        /// <summary>
        /// 获取框架依赖内容
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        public static List <NuspecFrameworkAssembly>?GetFrameworkAssemblies(IPackingContext context)
        {
            var nuspecFrameworkAssemblies = new List <NuspecFrameworkAssembly>();

            foreach (var targetFrameworkPackageInfo in context.MultiTargetingPackageInfo
                     .ValidTargetFrameworkPackageInfoList)
            {
                var sourcePackingFolder = targetFrameworkPackageInfo.SourcePackingFolder.FullName;

                var frameworkReferenceVersionFile = Path.Combine(sourcePackingFolder, "FrameworkReferenceVersionFile.txt");

                if (File.Exists(frameworkReferenceVersionFile))
                {
                    foreach (var assembly in File.ReadAllLines(frameworkReferenceVersionFile).Where(t => !string.IsNullOrWhiteSpace(t)))
                    {
                        nuspecFrameworkAssemblies.Add(new NuspecFrameworkAssembly()
                        {
                            TargetFramework = targetFrameworkPackageInfo.TargetFramework,
                            AssemblyName    = assembly
                        });
                    }
                }
            }

            if (nuspecFrameworkAssemblies.Count == 0)
            {
                // 如果没有任何框架依赖,那么应该啥都不输出
                return(null);
            }

            return(nuspecFrameworkAssemblies);
        }
Esempio n. 5
0
        public void Pack(IPackingContext context)
        {
            var srcFolder = Path.Combine(context.PackingFolder, "src");

            FileSystem.IgnoreFileEndList = IgnoreFileEndList;
            FileSystem.IgnoreFolderList  = IgnoreFolderList;
            FileSystem.CopyFolderContents(context.ProjectFolder, srcFolder, excludes: IgnoreFolderList);
        }
Esempio n. 6
0
        public void Pack(IPackingContext context)
        {
            var nuspecPackage = GetNuspec(context);

            var fileName = $"{context.PackageId}.nuspec";

            fileName = Path.Combine(context.PackingFolder, fileName);

            Write(nuspecPackage, fileName);
        }
Esempio n. 7
0
        public void Pack(IPackingContext context)
        {
            context.Logger.Message("开始复制源代码文件");
            var srcFolder = Path.Combine(context.PackingFolder, "src");

            context.Logger.Message("源代码临时复制文件夹 " + srcFolder);

            FileSystem.CopyFileList(context.ProjectFolder, srcFolder, context.PackagedProjectFile.GetAllFile().ToList());
            context.Logger.Message("复制源代码文件完成");
        }
Esempio n. 8
0
        public void Pack(IPackingContext context)
        {
            context.Logger.Message("开始复制源代码文件");
            var srcFolder = Path.Combine(context.PackingFolder, "src");

            context.Logger.Message("源代码临时复制文件夹 " + srcFolder);
            FileSystem.IgnoreFileEndList = IgnoreFileEndList;
            FileSystem.IgnoreFolderList  = IgnoreFolderList;
            FileSystem.CopyFolderContents(context.ProjectFolder, srcFolder, excludes: IgnoreFolderList);
            context.Logger.Message("复制源代码文件完成");
        }
        public void Pack(IPackingContext context)
        {
            _log = context.Logger;
            _log.Message("开始创建 nuspec 文件");
            var nuspecPackage = GetNuspec(context);

            var fileName = $"{context.PackageId}.nuspec";

            fileName = Path.Combine(context.PackingFolder, fileName);

            Write(nuspecPackage, fileName);
            _log.Message("完成创建 nuspec 文件");
        }
        public void Pack(IPackingContext context)
        {
            var current = new DirectoryInfo(Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location));

            while (current != null && !current.Name.Equals("tools", StringComparison.OrdinalIgnoreCase))
            {
                current = current.Parent;
            }
            if (current is null)
            {
                return;
            }

            FileSystem.CopyFolderContents(current.FullName, Path.Combine(context.PackingFolder, "tools"));
        }
Esempio n. 11
0
        public void Pack(IPackingContext context)
        {
            // 将 Assets 文件夹中的所有文件复制到打包文件夹中。

            var assetsFolder = Path.Combine(Path.GetDirectoryName(GetType().Assembly.Location) ?? throw new InvalidOperationException(), "Assets", "Target",
                                            "build");

            var copyFolder = Path.Combine(context.PackingFolder, "build");

            FileSystem.CopyFolderContents(assetsFolder, copyFolder, name =>
                                          name.Replace("$(PackageId)", context.PackageId));

            // 替换 props 和 targets 文件中的占位符。
            foreach (var file in new DirectoryInfo(copyFolder)
                     .EnumerateFiles("*.*", SearchOption.AllDirectories))
            {
                var builder = new StringBuilder(File.ReadAllText(file.FullName, Encoding.UTF8));
                builder
                .Replace("#(PackageId)", context.PackageId)
                .Replace("#(PackageGuid)", context.PackageGuid);
                File.WriteAllText(file.FullName, builder.ToString(), Encoding.UTF8);
            }
        }
Esempio n. 12
0
        private NuspecPackage GetNuspec(IPackingContext context)
        {
            var buildProps = context.BuildProps;

            return(new NuspecPackage()
            {
                NuspecMetadata = new NuspecMetadata()
                {
                    Authors = buildProps.Authors,
                    Copyright = buildProps.Copyright,
                    Description = buildProps.Description,
                    PackageProjectUrl = buildProps.PackageProjectUrl,
                    Version = context.PackageVersion,
                    Id = context.PackageId,
                    Owner = buildProps.Owner,
                    Title = buildProps.Title,
                    PackageIconUrl = buildProps.PackageIconUrl,
                    PackageLicenseUrl = buildProps.PackageLicenseUrl,
                    PackageTags = buildProps.PackageTags,
                    PackageReleaseNotes = buildProps.PackageReleaseNotes
                }
            });
        }
        private NuspecPackage GetNuspec(IPackingContext context)
        {
            var buildProps = context.BuildProps;

            Repository?repository = null;

            if (!string.IsNullOrEmpty(buildProps.RepositoryType) && !string.IsNullOrEmpty(buildProps.RepositoryUrl))
            {
                repository = new Repository()
                {
                    Type = buildProps.RepositoryType,
                    Url  = buildProps.RepositoryUrl
                };
            }

            return(new NuspecPackage()
            {
                NuspecMetadata = new NuspecMetadata()
                {
                    Authors = buildProps.Authors,
                    Copyright = buildProps.Copyright,
                    Description = buildProps.Description,
                    PackageProjectUrl = buildProps.PackageProjectUrl,
                    Version = context.PackageVersion,
                    Id = context.PackageId,
                    Owner = buildProps.Owner,
                    Title = buildProps.Title,
                    PackageIconUrl = buildProps.PackageIconUrl,
                    PackageLicenseUrl = buildProps.PackageLicenseUrl,
                    PackageTags = buildProps.PackageTags,
                    PackageReleaseNotes = buildProps.PackageReleaseNotes,
                    Dependencies = DependenciesParser.GetDependencies(context),
                    FrameworkAssemblies = DependenciesParser.GetFrameworkAssemblies(context),
                    Repository = repository
                }
            });
        }
Esempio n. 14
0
        /// <summary>
        /// 获取依赖内容
        /// </summary>
        /// <returns></returns>
        public static List <NuspecGroup> GetDependencies(IPackingContext context)
        {
            ILogger logger       = context.Logger;
            var     nuspecGroups = new List <NuspecGroup>();

            foreach (var targetFrameworkPackageInfo in context.MultiTargetingPackageInfo.ValidTargetFrameworkPackageInfoList)
            {
                var sourcePackingFolder = targetFrameworkPackageInfo.SourcePackingFolder.FullName;

                var packageReferenceVersionFile = Path.Combine(sourcePackingFolder, "PackageReferenceVersionFile.txt");

                var buildProps   = context.BuildProps;
                var dependencies = GetDependencies(packageReferenceVersionFile, buildProps.SourceYardPackageReferenceList,
                                                   buildProps.SourceYardExcludePackageReferenceList, logger);

                nuspecGroups.Add(new NuspecGroup()
                {
                    TargetFramework = targetFrameworkPackageInfo.TargetFramework,
                    Dependencies    = dependencies
                });
            }

            return(nuspecGroups);
        }