private static string buildNuGetSpecFile(PackageDescription context) { var engine = new RazorEngine <RazorTemplateBase>(); using (var reader = new StreamReader("Package.cshtml", true)) { var output = engine.RenderTemplate(reader, new[] { "System.Windows.Forms.dll" }, context); if (output == null) { throw new InvalidOperationException("*** ERROR:\r\n" + engine.ErrorMessage); } return(output); } }
private static void Main() { var codeFiles = Directory.GetFiles(SourceRootPath, "*.cs", SearchOption.AllDirectories); foreach(var codeFile in codeFiles) { var r = File.OpenRead(codeFile); var buffer = new byte[1024]; r.Read(buffer, 0, 1024); var codeBlock = System.Text.Encoding.UTF8.GetString(buffer); var nuspecRegion = Regex.Match(codeBlock, @"#region nuspec(.|\n)*?#endregion").Value.Replace("#region nuspec", "").Replace("#endregion", "").Replace("$nuspec = ", ""); if( !string.IsNullOrEmpty(nuspecRegion) ) { var result = Regex.Replace(nuspecRegion, @"//\s+", ""); using(var stringReader = new StringReader(result)) { using(var reader = new JsonTextReader(stringReader)) { var serializer = new JsonSerializer(); var packageConfig = serializer.Deserialize<PackageConfig>(reader); var packageId = packageConfig.Id; if( packageId.Equals("$id$", StringComparison.InvariantCultureIgnoreCase) ) { packageId = codeFile.Replace(SourceRootPath, "").TrimStart('\\').Replace(".cs", "").Replace(@"\", "."); } Console.WriteLine("Parsing package with id: " + packageId); var packagePath = Path.Combine(BuildRootPath, packageId); ensurePath(packagePath); var packageDescription = new PackageDescription { Id = packageId, Version = "1.0", Authors = packageConfig.Authors, Owners = packageConfig.Owners, LicenseUrl = packageConfig.LicenseUrl, ProjectUrl = packageConfig.ProjectUrl, IconUrl = packageConfig.IconUrl, Description = packageConfig.Description, RequireLicenseAcceptance = packageConfig.RequireLicenseAcceptance, Tags = packageConfig.Tags, }; var contentPath = Path.Combine(packagePath, "content"); ensurePath(contentPath); var codeFileName = codeFile.Replace(SourceRootPath, "").TrimStart('\\'); foreach(var file in new[] {codeFileName}.Concat(packageConfig.Dependencies.Include)) { var sourcePath = Path.Combine(SourceRootPath, file); var fileExists = File.Exists(sourcePath); color(fileExists ? ConsoleColor.DarkGreen : ConsoleColor.DarkRed, "\t" + file); if( fileExists==false ) { color(ConsoleColor.Yellow, "\tSkipping: " + packageId); continue; } var destinationPath = Path.Combine(contentPath, Path.GetDirectoryName(file.Replace(@"Magnetix\", ""))); ensurePath(destinationPath); destinationPath = Path.Combine(destinationPath, Path.GetFileName(sourcePath) + ".pp"); transform(sourcePath, destinationPath); if( packageConfig.Dependencies!=null ) { var dependencies = new List<Dependency>(); foreach(var dependency in packageConfig.Dependencies.Require) { color(ConsoleColor.DarkMagenta, () => { Console.WriteLine("\tuses: " + dependency.Id); dependencies.Add(new Dependency {Id = dependency.Id, Version = dependency.Version}); }); } packageDescription.Dependencies = dependencies.ToArray(); } var template = buildNuGetSpecFile(packageDescription); File.WriteAllText(Path.Combine(packagePath, packageId + ".nuspec"), template); } } } } } return; }
private static void Main() { var codeFiles = Directory.GetFiles(SourceRootPath, "*.cs", SearchOption.AllDirectories); foreach (var codeFile in codeFiles) { var r = File.OpenRead(codeFile); var buffer = new byte[1024]; r.Read(buffer, 0, 1024); var codeBlock = System.Text.Encoding.UTF8.GetString(buffer); var nuspecRegion = Regex.Match(codeBlock, @"#region nuspec(.|\n)*?#endregion").Value.Replace("#region nuspec", "").Replace("#endregion", "").Replace("$nuspec = ", ""); if (!string.IsNullOrEmpty(nuspecRegion)) { var result = Regex.Replace(nuspecRegion, @"//\s+", ""); using (var stringReader = new StringReader(result)) { using (var reader = new JsonTextReader(stringReader)) { var serializer = new JsonSerializer(); var packageConfig = serializer.Deserialize <PackageConfig>(reader); var packageId = packageConfig.Id; if (packageId.Equals("$id$", StringComparison.InvariantCultureIgnoreCase)) { packageId = codeFile.Replace(SourceRootPath, "").TrimStart('\\').Replace(".cs", "").Replace(@"\", "."); } Console.WriteLine("Parsing package with id: " + packageId); var packagePath = Path.Combine(BuildRootPath, packageId); ensurePath(packagePath); var packageDescription = new PackageDescription { Id = packageId, Version = "1.0", Authors = packageConfig.Authors, Owners = packageConfig.Owners, LicenseUrl = packageConfig.LicenseUrl, ProjectUrl = packageConfig.ProjectUrl, IconUrl = packageConfig.IconUrl, Description = packageConfig.Description, RequireLicenseAcceptance = packageConfig.RequireLicenseAcceptance, Tags = packageConfig.Tags, }; var contentPath = Path.Combine(packagePath, "content"); ensurePath(contentPath); var codeFileName = codeFile.Replace(SourceRootPath, "").TrimStart('\\'); foreach (var file in new[] { codeFileName }.Concat(packageConfig.Dependencies.Include)) { var sourcePath = Path.Combine(SourceRootPath, file); var fileExists = File.Exists(sourcePath); color(fileExists ? ConsoleColor.DarkGreen : ConsoleColor.DarkRed, "\t" + file); if (fileExists == false) { color(ConsoleColor.Yellow, "\tSkipping: " + packageId); continue; } var destinationPath = Path.Combine(contentPath, Path.GetDirectoryName(file.Replace(@"Magnetix\", ""))); ensurePath(destinationPath); destinationPath = Path.Combine(destinationPath, Path.GetFileName(sourcePath) + ".pp"); transform(sourcePath, destinationPath); if (packageConfig.Dependencies != null) { var dependencies = new List <Dependency>(); foreach (var dependency in packageConfig.Dependencies.Require) { color(ConsoleColor.DarkMagenta, () => { Console.WriteLine("\tuses: " + dependency.Id); dependencies.Add(new Dependency { Id = dependency.Id, Version = dependency.Version }); }); } packageDescription.Dependencies = dependencies.ToArray(); } var template = buildNuGetSpecFile(packageDescription); File.WriteAllText(Path.Combine(packagePath, packageId + ".nuspec"), template); } } } } } return; }
private static string buildNuGetSpecFile(PackageDescription context) { var engine = new RazorEngine<RazorTemplateBase>(); using(var reader = new StreamReader("Package.cshtml", true)) { var output = engine.RenderTemplate(reader, new[] {"System.Windows.Forms.dll"}, context); if( output==null ) { throw new InvalidOperationException("*** ERROR:\r\n" + engine.ErrorMessage); } return output; } }