Beispiel #1
0
        private void BindPhase(Output output, TableDefinitionCollection tableDefinitions)
        {
            var localizations = this.LoadLocalizationFiles(tableDefinitions).ToList();

            var localizer = new Localizer(localizations);

            var resolver = new WixVariableResolver(localizer);

            var binder = new Binder();

            binder.TempFilesLocation   = this.IntermediateFolder;
            binder.WixVariableResolver = resolver;
            binder.SuppressValidation  = true;

            binder.ContentsFile     = this.ContentsFile;
            binder.OutputsFile      = this.OutputsFile;
            binder.BuiltOutputsFile = this.BuiltOutputsFile;
            binder.WixprojectFile   = this.WixProjectFile;

            if (this.BindPaths != null)
            {
                binder.BindPaths.AddRange(this.BindPaths);
            }

            binder.AddExtension(new BinderFileManager());

            binder.Bind(output, this.OutputPath);
        }
Beispiel #2
0
        private List <string> ResolveFilePathsToEmbed(IEnumerable <IntermediateSection> sections)
        {
            var embedFilePaths = new List <string>();

            // Resolve paths to files that are to be embedded in the library.
            if (this.Context.BindFiles)
            {
                var variableResolver = new WixVariableResolver(this.Messaging);

                var fileResolver = new FileResolver(this.Context.BindPaths, this.Context.Extensions);

                foreach (var tuple in sections.SelectMany(s => s.Tuples))
                {
                    foreach (var field in tuple.Fields.Where(f => f?.Type == IntermediateFieldType.Path))
                    {
                        var pathField = field.AsPath();

                        if (pathField != null)
                        {
                            var resolution = variableResolver.ResolveVariables(tuple.SourceLineNumbers, pathField.Path, false);

                            var file = fileResolver.Resolve(tuple.SourceLineNumbers, tuple.Definition, resolution.Value);

                            if (!String.IsNullOrEmpty(file))
                            {
                                // File was successfully resolved so track the embedded index as the embedded file index.
                                field.Set(new IntermediateFieldPathValue {
                                    EmbeddedFileIndex = embedFilePaths.Count
                                });

                                embedFilePaths.Add(file);
                            }
                            else
                            {
                                this.Messaging.Write(ErrorMessages.FileNotFound(tuple.SourceLineNumbers, pathField.Path, tuple.Definition.Name));
                            }
                        }
                    }
                }
            }

            return(embedFilePaths);
        }