diff options
Diffstat (limited to 'src/ext/NetFx/wixext/NetFxCompiler.cs')
-rw-r--r-- | src/ext/NetFx/wixext/NetFxCompiler.cs | 166 |
1 files changed, 166 insertions, 0 deletions
diff --git a/src/ext/NetFx/wixext/NetFxCompiler.cs b/src/ext/NetFx/wixext/NetFxCompiler.cs index 90aa8bcb..739618e9 100644 --- a/src/ext/NetFx/wixext/NetFxCompiler.cs +++ b/src/ext/NetFx/wixext/NetFxCompiler.cs | |||
@@ -40,12 +40,178 @@ namespace WixToolset.Netfx | |||
40 | break; | 40 | break; |
41 | } | 41 | } |
42 | break; | 42 | break; |
43 | case "Bundle": | ||
44 | case "Fragment": | ||
45 | switch (element.Name.LocalName) | ||
46 | { | ||
47 | case "DotNetCoreSearch": | ||
48 | this.ParseDotNetCoreSearchElement(intermediate, section, element); | ||
49 | break; | ||
50 | case "DotNetCoreSearchRef": | ||
51 | this.ParseDotNetCoreSearchRefElement(intermediate, section, element); | ||
52 | break; | ||
53 | } | ||
54 | |||
55 | break; | ||
43 | default: | 56 | default: |
44 | this.ParseHelper.UnexpectedElement(parentElement, element); | 57 | this.ParseHelper.UnexpectedElement(parentElement, element); |
45 | break; | 58 | break; |
46 | } | 59 | } |
47 | } | 60 | } |
48 | 61 | ||
62 | private void ParseDotNetCoreSearchElement(Intermediate intermediate, IntermediateSection section, XElement element) | ||
63 | { | ||
64 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | ||
65 | Identifier id = null; | ||
66 | string variable = null; | ||
67 | string condition = null; | ||
68 | string after = null; | ||
69 | NetCoreSearchRuntimeType? runtimeType = null; | ||
70 | NetCoreSearchPlatform? platform = null; | ||
71 | var majorVersion = CompilerConstants.IntegerNotSet; | ||
72 | |||
73 | foreach (var attrib in element.Attributes()) | ||
74 | { | ||
75 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
76 | { | ||
77 | switch (attrib.Name.LocalName) | ||
78 | { | ||
79 | case "Id": | ||
80 | id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); | ||
81 | break; | ||
82 | case "Variable": | ||
83 | variable = this.ParseHelper.GetAttributeBundleVariableNameValue(sourceLineNumbers, attrib); | ||
84 | break; | ||
85 | case "Condition": | ||
86 | condition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
87 | break; | ||
88 | case "After": | ||
89 | after = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
90 | break; | ||
91 | case "RuntimeType": | ||
92 | var runtimeTypeValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
93 | switch (runtimeTypeValue) | ||
94 | { | ||
95 | case "aspnet": | ||
96 | runtimeType = NetCoreSearchRuntimeType.Aspnet; | ||
97 | break; | ||
98 | case "core": | ||
99 | runtimeType = NetCoreSearchRuntimeType.Core; | ||
100 | break; | ||
101 | case "desktop": | ||
102 | runtimeType = NetCoreSearchRuntimeType.Desktop; | ||
103 | break; | ||
104 | default: | ||
105 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "RuntimeType", runtimeTypeValue, "aspnet", "core", "desktop")); | ||
106 | break; | ||
107 | } | ||
108 | break; | ||
109 | case "Platform": | ||
110 | var platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
111 | switch (platformValue) | ||
112 | { | ||
113 | case "arm64": | ||
114 | platform = NetCoreSearchPlatform.Arm64; | ||
115 | break; | ||
116 | case "x64": | ||
117 | platform = NetCoreSearchPlatform.X64; | ||
118 | break; | ||
119 | case "x86": | ||
120 | platform = NetCoreSearchPlatform.X86; | ||
121 | break; | ||
122 | default: | ||
123 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86")); | ||
124 | break; | ||
125 | } | ||
126 | break; | ||
127 | case "MajorVersion": | ||
128 | // .NET Core had a different deployment strategy before .NET Core 3.0 which would require different detection logic. | ||
129 | majorVersion = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 3, Int32.MaxValue); | ||
130 | break; | ||
131 | default: | ||
132 | this.ParseHelper.UnexpectedAttribute(element, attrib); | ||
133 | break; | ||
134 | } | ||
135 | } | ||
136 | else | ||
137 | { | ||
138 | this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); | ||
139 | } | ||
140 | } | ||
141 | |||
142 | if (id == null) | ||
143 | { | ||
144 | id = this.ParseHelper.CreateIdentifier("dncs", variable, condition, after); | ||
145 | } | ||
146 | |||
147 | if (!runtimeType.HasValue) | ||
148 | { | ||
149 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "RuntimeType")); | ||
150 | } | ||
151 | |||
152 | if (!platform.HasValue) | ||
153 | { | ||
154 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform")); | ||
155 | } | ||
156 | |||
157 | if (majorVersion == CompilerConstants.IntegerNotSet) | ||
158 | { | ||
159 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "MajorVersion")); | ||
160 | } | ||
161 | else if (majorVersion == 4) | ||
162 | { | ||
163 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "MajorVersion", "4", "3", "5+")); | ||
164 | } | ||
165 | |||
166 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | ||
167 | |||
168 | var bundleExtensionId = this.ParseHelper.CreateIdentifierValueFromPlatform("Wix4NetfxBundleExtension", this.Context.Platform, BurnPlatforms.X86 | BurnPlatforms.X64 | BurnPlatforms.ARM64); | ||
169 | if (bundleExtensionId == null) | ||
170 | { | ||
171 | this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, this.Context.Platform.ToString(), element.Name.LocalName)); | ||
172 | } | ||
173 | |||
174 | if (!this.Messaging.EncounteredError) | ||
175 | { | ||
176 | this.ParseHelper.CreateWixSearchSymbol(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, bundleExtensionId); | ||
177 | |||
178 | section.AddSymbol(new NetFxNetCoreSearchSymbol(sourceLineNumbers, id) | ||
179 | { | ||
180 | RuntimeType = runtimeType.Value, | ||
181 | Platform = platform.Value, | ||
182 | MajorVersion = majorVersion, | ||
183 | }); | ||
184 | } | ||
185 | } | ||
186 | |||
187 | private void ParseDotNetCoreSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element) | ||
188 | { | ||
189 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | ||
190 | |||
191 | foreach (var attrib in element.Attributes()) | ||
192 | { | ||
193 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
194 | { | ||
195 | switch (attrib.Name.LocalName) | ||
196 | { | ||
197 | case "Id": | ||
198 | var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
199 | this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, NetfxSymbolDefinitions.NetFxNetCoreSearch, refId); | ||
200 | break; | ||
201 | default: | ||
202 | this.ParseHelper.UnexpectedAttribute(element, attrib); | ||
203 | break; | ||
204 | } | ||
205 | } | ||
206 | else | ||
207 | { | ||
208 | this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); | ||
209 | } | ||
210 | } | ||
211 | |||
212 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | ||
213 | } | ||
214 | |||
49 | /// <summary> | 215 | /// <summary> |
50 | /// Parses a NativeImage element. | 216 | /// Parses a NativeImage element. |
51 | /// </summary> | 217 | /// </summary> |