public WxsGenerator(SwixModel model, GuidProvider guidProvider) { _model = model; _guidProvider = guidProvider; DetectIfModule(); VerifyDirectories(); AssignCabFileIds(); FindNonUniqueDirectoryReadableIds(); AssignDirectoryIds(); VerifyDirectoryRefs(); VerifyCabFileRefs(); HandleInlineTargetDirSpecifications(); }
public static GuidProvider CreateFromStream(StreamReader source, bool treatAbsentGuidAsError) { var result = new GuidProvider(treatAbsentGuidAsError); string line; while ((line = source.ReadLine()) != null) { var match = LineRegex.Match(line); var path = match.Groups["path"].Value; var guid = Guid.Parse(match.Groups["guid"].Value); result._loadedFromFileGuids.Add(path, guid); } return(result); }
public static SwixModel Transform(string swixFilename, SwixGuidMode guidMode, string targetFolderPath, IDictionary <string, string> variableDefinitions = null) { var folderPath = Path.GetDirectoryName(swixFilename) ?? Path.GetPathRoot(swixFilename); var baseName = Path.GetFileNameWithoutExtension(swixFilename); var guidProviderFileName = Path.Combine(folderPath, $"{baseName}.guid.info"); if (File.Exists(guidProviderFileName)) { StripReadonlyIfSet(guidProviderFileName); } var outputFile = Path.Combine(targetFolderPath, $"{baseName}.generated.wxs"); if (File.Exists(outputFile)) { StripReadonlyIfSet(outputFile); } TempDir = Path.Combine(targetFolderPath, "swixtemp"); try { if (Directory.Exists(TempDir)) { Directory.Delete(TempDir, recursive: true); Directory.CreateDirectory(TempDir); } } catch (Exception e) { Console.WriteLine($"Warning: Cannot clean temp directory {TempDir}: {e}"); } GuidProvider guidProvider; if (guidMode != SwixGuidMode.AlwaysGenerateNew && File.Exists(guidProviderFileName)) { using (var guidReader = new StreamReader(guidProviderFileName)) guidProvider = GuidProvider.CreateFromStream(guidReader, treatAbsentGuidAsError: guidMode == SwixGuidMode.TreatAbsentGuidAsError); } else { if (guidMode == SwixGuidMode.TreatAbsentGuidAsError) { throw new SwixSemanticException(0, $"TreatAbsentGuidAsError mode is active, but no {guidProviderFileName} file is found"); } guidProvider = new GuidProvider(treatAbsentGuidAsError: false); } SwixModel model; using (var sourceReader = new StreamReader(swixFilename)) { model = SwixParser.Parse(sourceReader, guidProvider, variableDefinitions); } var wxsGenerator = new WxsGenerator(model, guidProvider); using (var outputStream = new StreamWriter(outputFile)) wxsGenerator.WriteToStream(outputStream); if (guidMode == SwixGuidMode.UseExistingAndExtendStorage) { using (var guidOutputStream = new StreamWriter(guidProviderFileName)) guidProvider.SaveToStream(guidOutputStream, pruneUnused: false); } else if (guidMode == SwixGuidMode.UseExistingAndUpdateStorage) { using (var guidOutputStream = new StreamWriter(guidProviderFileName)) guidProvider.SaveToStream(guidOutputStream, pruneUnused: true); } return(model); }
public FileSemanticContext(SwixModel result, GuidProvider guidProvider) : base(0, new AttributeContext(new Dictionary <string, string>(), guidProvider)) { _result = result; }
public static SwixModel Parse(TextReader sourceStream, GuidProvider guidProvider, IDictionary <string, string> variableDefinitions = null) { return(new SwixParser(sourceStream, guidProvider).Run(variableDefinitions)); }
private SwixParser(TextReader sourceStream, GuidProvider guidProvider) { _sourceStream = sourceStream; _guidProvider = guidProvider; }