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; } } } }
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); }
/// <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); }
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); }
public void Pack(IPackingContext context) { var nuspecPackage = GetNuspec(context); var fileName = $"{context.PackageId}.nuspec"; fileName = Path.Combine(context.PackingFolder, fileName); Write(nuspecPackage, fileName); }
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("复制源代码文件完成"); }
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")); }
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); } }
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 } }); }
/// <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); }