diff options
Diffstat (limited to 'src/WixToolset.Core/Bind/FileResolver.cs')
-rw-r--r-- | src/WixToolset.Core/Bind/FileResolver.cs | 36 |
1 files changed, 26 insertions, 10 deletions
diff --git a/src/WixToolset.Core/Bind/FileResolver.cs b/src/WixToolset.Core/Bind/FileResolver.cs index 86075e46..01dfe36c 100644 --- a/src/WixToolset.Core/Bind/FileResolver.cs +++ b/src/WixToolset.Core/Bind/FileResolver.cs | |||
@@ -43,17 +43,24 @@ namespace WixToolset.Core.Bind | |||
43 | 43 | ||
44 | public string Resolve(SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, string source) | 44 | public string Resolve(SourceLineNumber sourceLineNumbers, IntermediateTupleDefinition tupleDefinition, string source) |
45 | { | 45 | { |
46 | var checkedPaths = new List<string>(); | ||
47 | |||
46 | foreach (var extension in this.LibrarianExtensions) | 48 | foreach (var extension in this.LibrarianExtensions) |
47 | { | 49 | { |
48 | var resolved = extension.Resolve(sourceLineNumbers, tupleDefinition, source); | 50 | var resolved = extension.ResolveFile(sourceLineNumbers, tupleDefinition, source); |
51 | |||
52 | if (resolved?.CheckedPaths != null) | ||
53 | { | ||
54 | checkedPaths.AddRange(resolved.CheckedPaths); | ||
55 | } | ||
49 | 56 | ||
50 | if (null != resolved) | 57 | if (!String.IsNullOrEmpty(resolved?.Path)) |
51 | { | 58 | { |
52 | return resolved; | 59 | return resolved?.Path; |
53 | } | 60 | } |
54 | } | 61 | } |
55 | 62 | ||
56 | return this.ResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, BindStage.Normal); | 63 | return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, BindStage.Normal, checkedPaths); |
57 | } | 64 | } |
58 | 65 | ||
59 | /// <summary> | 66 | /// <summary> |
@@ -66,24 +73,32 @@ namespace WixToolset.Core.Bind | |||
66 | /// <returns>Should return a valid path for the stream to be imported.</returns> | 73 | /// <returns>Should return a valid path for the stream to be imported.</returns> |
67 | public string ResolveFile(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage) | 74 | public string ResolveFile(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage) |
68 | { | 75 | { |
76 | var checkedPaths = new List<string>(); | ||
77 | |||
69 | foreach (var extension in this.ResolverExtensions) | 78 | foreach (var extension in this.ResolverExtensions) |
70 | { | 79 | { |
71 | var resolved = extension.ResolveFile(source, tupleDefinition, sourceLineNumbers, bindStage); | 80 | var resolved = extension.ResolveFile(source, tupleDefinition, sourceLineNumbers, bindStage); |
72 | 81 | ||
73 | if (null != resolved) | 82 | if (resolved?.CheckedPaths != null) |
83 | { | ||
84 | checkedPaths.AddRange(resolved.CheckedPaths); | ||
85 | } | ||
86 | |||
87 | if (!String.IsNullOrEmpty(resolved?.Path)) | ||
74 | { | 88 | { |
75 | return resolved; | 89 | return resolved?.Path; |
76 | } | 90 | } |
77 | } | 91 | } |
78 | 92 | ||
79 | return this.ResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, bindStage); | 93 | return this.MustResolveUsingBindPaths(source, tupleDefinition, sourceLineNumbers, bindStage, checkedPaths); |
80 | } | 94 | } |
81 | 95 | ||
82 | private string ResolveUsingBindPaths(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage) | 96 | private string MustResolveUsingBindPaths(string source, IntermediateTupleDefinition tupleDefinition, SourceLineNumber sourceLineNumbers, BindStage bindStage, List<string> checkedPaths) |
83 | { | 97 | { |
84 | string resolved = null; | 98 | string resolved = null; |
85 | 99 | ||
86 | // If the file exists, we're good to go. | 100 | // If the file exists, we're good to go. |
101 | checkedPaths.Add(source); | ||
87 | if (CheckFileExists(source)) | 102 | if (CheckFileExists(source)) |
88 | { | 103 | { |
89 | resolved = source; | 104 | resolved = source; |
@@ -121,6 +136,7 @@ namespace WixToolset.Core.Bind | |||
121 | { | 136 | { |
122 | var filePath = Path.Combine(bindPath.Path, pathWithoutSourceDir); | 137 | var filePath = Path.Combine(bindPath.Path, pathWithoutSourceDir); |
123 | 138 | ||
139 | checkedPaths.Add(filePath); | ||
124 | if (CheckFileExists(filePath)) | 140 | if (CheckFileExists(filePath)) |
125 | { | 141 | { |
126 | resolved = filePath; | 142 | resolved = filePath; |
@@ -131,6 +147,7 @@ namespace WixToolset.Core.Bind | |||
131 | { | 147 | { |
132 | var filePath = Path.Combine(bindPath.Path, path); | 148 | var filePath = Path.Combine(bindPath.Path, path); |
133 | 149 | ||
150 | checkedPaths.Add(filePath); | ||
134 | if (CheckFileExists(filePath)) | 151 | if (CheckFileExists(filePath)) |
135 | { | 152 | { |
136 | resolved = filePath; | 153 | resolved = filePath; |
@@ -141,10 +158,9 @@ namespace WixToolset.Core.Bind | |||
141 | 158 | ||
142 | if (null == resolved) | 159 | if (null == resolved) |
143 | { | 160 | { |
144 | throw new WixFileNotFoundException(sourceLineNumbers, source, tupleDefinition.Name); | 161 | throw new WixException(ErrorMessages.FileNotFound(sourceLineNumbers, source, tupleDefinition.Name, checkedPaths)); |
145 | } | 162 | } |
146 | 163 | ||
147 | // Didn't find the file. | ||
148 | return resolved; | 164 | return resolved; |
149 | } | 165 | } |
150 | 166 | ||