public static AsmProject DeserializeBwmFile(FileInfo file) { var header = new ProjectFileHeader(); var xmlDocument = new XmlDocument(); xmlDocument.Load(file.FullName); string xmlString = xmlDocument.OuterXml; using (var read = new StringReader(xmlString)) { var serializer = new XmlSerializer(typeof(ProjectFileHeader)); using (var reader = new XmlTextReader(read)) { if (serializer.CanDeserialize(reader)) { header = (ProjectFileHeader)serializer.Deserialize(reader); } else { serializer = new XmlSerializer(typeof(LegacyProjectFileHeaderV1)); var legacyHeader = (LegacyProjectFileHeaderV1)serializer.Deserialize(reader); legacyHeader.FixCompatibility(); header = legacyHeader; } } } var project = new AsmProject { Directory = file.Directory, ProjectFile = file }; header.GetProjectModel(project); return(project); }
public void Save(Func <FileInfo, string> getNewFileName = null) { if (getNewFileName != null) { throw new NotImplementedException(); } try { var fileHeader = ProjectFileHeader.GetFileHeader(this); var xmlDocument = new XmlDocument(); var serializer = new XmlSerializer(fileHeader.GetType()); using (var stream = new MemoryStream()) { serializer.Serialize(stream, fileHeader); stream.Position = 0; xmlDocument.Load(stream); xmlDocument.Save(ProjectFile.FullName); } Pristine = true; } catch (Exception ex) { throw new Exception("Error when trying to save project file: " + ex.Message, ex); } }
// EXPORT public static ProjectFileHeader GetFileHeader(AsmProject project) { var header = new ProjectFileHeader(); var fileReferences = new Dictionary <AsmProjectFile, int>(); header.Type = project.Type; header.Name = project.Name; header.ExtraDirectories = project.Directories.Select(d => project.GetRelativePath(d.FullName)).ToArray(); var filesHeaders = new List <ProjectFileFileHeader>(); for (var i = 0; i < project.Files.Count; i++) { var file = project.Files[i]; var fileHeader = new ProjectFileFileHeader(); fileHeader.RelativePath = project.GetRelativePath(file.File.FullName); fileHeader.Id = i; fileHeader.Mode = file.Mode; if (file.Pipeline != null) { var pipelineHeader = new PipelineHeader(); if (file.Pipeline is ChrPipeline) { pipelineHeader.Type = "chr"; } file.Pipeline.GetSettings(pipelineHeader.Settings); pipelineHeader.LastProcessed = file.Pipeline.LastProcessed; pipelineHeader.Output = file.Pipeline.OutputFiles.Select(project.GetRelativePath).ToArray(); fileHeader.Pipeline = pipelineHeader; } fileReferences.Add(file, i); filesHeaders.Add(fileHeader); } header.Files = filesHeaders.ToArray(); var configurations = new List <BuildConfigurationHeader>(); foreach (var c in project.BuildConfigurations) { var buildConfigurationHeader = new BuildConfigurationHeader { Data = new[] { c.ChrBuildPath, c.PrgBuildPath, c.BuildPath, c.ChrFile, c.DebugFile, c.Filename, c.LinkerConfigFile, c.MapFile, c.PrgFile, c.Name, string.Join(",", c.Symbols), c.CalculateChecksum ? "1" : "0" }, ChrBankFileIds = c.ChrBanks.Select(b => b.Sources.Select(f => fileReferences[f]).ToArray()).ToArray() }; if (buildConfigurationHeader.ChrBankFileIds.Length == 0) { buildConfigurationHeader.ChrBankFileIds = null; } configurations.Add(buildConfigurationHeader); } header.BuildConfigurations = configurations.ToArray(); return(header); }