diff options
Diffstat (limited to 'src/ext/NetFx/wixext/NetFxCompiler.cs')
-rw-r--r-- | src/ext/NetFx/wixext/NetFxCompiler.cs | 190 |
1 files changed, 175 insertions, 15 deletions
diff --git a/src/ext/NetFx/wixext/NetFxCompiler.cs b/src/ext/NetFx/wixext/NetFxCompiler.cs index 7a37cf90..c40bc77b 100644 --- a/src/ext/NetFx/wixext/NetFxCompiler.cs +++ b/src/ext/NetFx/wixext/NetFxCompiler.cs | |||
@@ -55,6 +55,12 @@ namespace WixToolset.Netfx | |||
55 | case "DotNetCoreSdkSearchRef": | 55 | case "DotNetCoreSdkSearchRef": |
56 | this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element); | 56 | this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element); |
57 | break; | 57 | break; |
58 | case "DotNetCoreSdkFeatureBandSearch": | ||
59 | this.ParseDotNetCoreSdkFeatureBandSearchElement(intermediate, section, element); | ||
60 | break; | ||
61 | case "DotNetCoreSdkFeatureBandSearchRef": | ||
62 | this.ParseDotNetCoreSdkFeatureBandSearchRefElement(intermediate, section, element); | ||
63 | break; | ||
58 | case "DotNetCompatibilityCheck": | 64 | case "DotNetCompatibilityCheck": |
59 | this.ParseDotNetCompatibilityCheckElement(intermediate, section, element); | 65 | this.ParseDotNetCompatibilityCheckElement(intermediate, section, element); |
60 | break; | 66 | break; |
@@ -81,6 +87,12 @@ namespace WixToolset.Netfx | |||
81 | case "DotNetCoreSdkSearchRef": | 87 | case "DotNetCoreSdkSearchRef": |
82 | this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element); | 88 | this.ParseDotNetCoreSdkSearchRefElement(intermediate, section, element); |
83 | break; | 89 | break; |
90 | case "DotNetCoreSdkFeatureBandSearch": | ||
91 | this.ParseDotNetCoreSdkFeatureBandSearchElement(intermediate, section, element); | ||
92 | break; | ||
93 | case "DotNetCoreSdkFeatureBandSearchRef": | ||
94 | this.ParseDotNetCoreSdkFeatureBandSearchRefElement(intermediate, section, element); | ||
95 | break; | ||
84 | default: | 96 | default: |
85 | this.ParseHelper.UnexpectedElement(parentElement, element); | 97 | this.ParseHelper.UnexpectedElement(parentElement, element); |
86 | break; | 98 | break; |
@@ -267,8 +279,8 @@ namespace WixToolset.Netfx | |||
267 | string variable = null; | 279 | string variable = null; |
268 | string condition = null; | 280 | string condition = null; |
269 | string after = null; | 281 | string after = null; |
270 | NetCoreSdkSearchPlatform? platform = null; | 282 | NetCoreSearchPlatform? platform = null; |
271 | string version = null; | 283 | var majorVersion = CompilerConstants.IntegerNotSet; |
272 | 284 | ||
273 | foreach (var attrib in element.Attributes()) | 285 | foreach (var attrib in element.Attributes()) |
274 | { | 286 | { |
@@ -293,22 +305,22 @@ namespace WixToolset.Netfx | |||
293 | switch (platformValue) | 305 | switch (platformValue) |
294 | { | 306 | { |
295 | case "arm64": | 307 | case "arm64": |
296 | platform = NetCoreSdkSearchPlatform.Arm64; | 308 | platform = NetCoreSearchPlatform.Arm64; |
297 | break; | 309 | break; |
298 | case "x64": | 310 | case "x64": |
299 | platform = NetCoreSdkSearchPlatform.X64; | 311 | platform = NetCoreSearchPlatform.X64; |
300 | break; | 312 | break; |
301 | case "x86": | 313 | case "x86": |
302 | platform = NetCoreSdkSearchPlatform.X86; | 314 | platform = NetCoreSearchPlatform.X86; |
303 | break; | 315 | break; |
304 | default: | 316 | default: |
305 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86")); | 317 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86")); |
306 | break; | 318 | break; |
307 | } | 319 | } |
308 | break; | 320 | break; |
309 | case "Version": | 321 | case "MajorVersion": |
310 | // .NET Core had a different deployment strategy before .NET Core 3.0 which would require different detection logic. | 322 | // .NET Core had a different deployment strategy before .NET Core 3.0 which would require different detection logic. |
311 | version = this.ParseHelper.GetAttributeVersionValue(sourceLineNumbers, attrib); | 323 | majorVersion = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 3, Int32.MaxValue); |
312 | break; | 324 | break; |
313 | default: | 325 | default: |
314 | this.ParseHelper.UnexpectedAttribute(element, attrib); | 326 | this.ParseHelper.UnexpectedAttribute(element, attrib); |
@@ -331,16 +343,13 @@ namespace WixToolset.Netfx | |||
331 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform")); | 343 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform")); |
332 | } | 344 | } |
333 | 345 | ||
334 | 346 | if (majorVersion == CompilerConstants.IntegerNotSet) | |
335 | if (String.IsNullOrEmpty(version)) | ||
336 | { | 347 | { |
337 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Version")); | 348 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "MajorVersion")); |
338 | } | 349 | } |
339 | 350 | else if (majorVersion == 4) | |
340 | var ver = Version.Parse(version); | ||
341 | if (ver.Major == 4) | ||
342 | { | 351 | { |
343 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "3.*", "5+.*")); | 352 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "MajorVersion", "4", "3", "5+")); |
344 | } | 353 | } |
345 | 354 | ||
346 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | 355 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); |
@@ -358,7 +367,7 @@ namespace WixToolset.Netfx | |||
358 | section.AddSymbol(new NetFxNetCoreSdkSearchSymbol(sourceLineNumbers, id) | 367 | section.AddSymbol(new NetFxNetCoreSdkSearchSymbol(sourceLineNumbers, id) |
359 | { | 368 | { |
360 | Platform = platform.Value, | 369 | Platform = platform.Value, |
361 | Version = version, | 370 | MajorVersion = majorVersion, |
362 | }); | 371 | }); |
363 | } | 372 | } |
364 | } | 373 | } |
@@ -391,6 +400,157 @@ namespace WixToolset.Netfx | |||
391 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | 400 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); |
392 | } | 401 | } |
393 | 402 | ||
403 | private void ParseDotNetCoreSdkFeatureBandSearchElement(Intermediate intermediate, IntermediateSection section, XElement element) | ||
404 | { | ||
405 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | ||
406 | Identifier id = null; | ||
407 | string variable = null; | ||
408 | string condition = null; | ||
409 | string after = null; | ||
410 | NetCoreSearchPlatform? platform = null; | ||
411 | string version = null; | ||
412 | var majorVersion = 0; | ||
413 | var minorVersion = 0; | ||
414 | var patchVersion = 0; | ||
415 | |||
416 | foreach (var attrib in element.Attributes()) | ||
417 | { | ||
418 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
419 | { | ||
420 | switch (attrib.Name.LocalName) | ||
421 | { | ||
422 | case "Id": | ||
423 | id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib); | ||
424 | break; | ||
425 | case "Variable": | ||
426 | variable = this.ParseHelper.GetAttributeBundleVariableNameValue(sourceLineNumbers, attrib); | ||
427 | break; | ||
428 | case "Condition": | ||
429 | condition = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
430 | break; | ||
431 | case "After": | ||
432 | after = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
433 | break; | ||
434 | case "Platform": | ||
435 | var platformValue = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
436 | switch (platformValue) | ||
437 | { | ||
438 | case "arm64": | ||
439 | platform = NetCoreSearchPlatform.Arm64; | ||
440 | break; | ||
441 | case "x64": | ||
442 | platform = NetCoreSearchPlatform.X64; | ||
443 | break; | ||
444 | case "x86": | ||
445 | platform = NetCoreSearchPlatform.X86; | ||
446 | break; | ||
447 | default: | ||
448 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Platform", platformValue, "arm64", "x64", "x86")); | ||
449 | break; | ||
450 | } | ||
451 | break; | ||
452 | case "Version": | ||
453 | version = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib); | ||
454 | break; | ||
455 | default: | ||
456 | this.ParseHelper.UnexpectedAttribute(element, attrib); | ||
457 | break; | ||
458 | } | ||
459 | } | ||
460 | else | ||
461 | { | ||
462 | this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); | ||
463 | } | ||
464 | } | ||
465 | |||
466 | if (id == null) | ||
467 | { | ||
468 | id = this.ParseHelper.CreateIdentifier("dncsfbs", variable, condition, after); | ||
469 | } | ||
470 | |||
471 | if (!platform.HasValue) | ||
472 | { | ||
473 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform")); | ||
474 | } | ||
475 | |||
476 | if (String.IsNullOrEmpty(version)) | ||
477 | { | ||
478 | this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Version")); | ||
479 | } | ||
480 | else | ||
481 | { | ||
482 | if (!Version.TryParse(version, out var featureBandVersion)) | ||
483 | { | ||
484 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "x.x.x00")); | ||
485 | } | ||
486 | else | ||
487 | { | ||
488 | majorVersion = featureBandVersion.Major; | ||
489 | minorVersion = featureBandVersion.Minor; | ||
490 | patchVersion = featureBandVersion.Build; | ||
491 | |||
492 | if ((patchVersion % 100) != 0 || featureBandVersion.Revision != -1) | ||
493 | { | ||
494 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "x.x.x00")); | ||
495 | } | ||
496 | |||
497 | if (majorVersion == 4) | ||
498 | { | ||
499 | this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, "Version", version, "3.*", "5+.*")); | ||
500 | } | ||
501 | } | ||
502 | } | ||
503 | |||
504 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | ||
505 | |||
506 | var bundleExtensionId = this.ParseHelper.CreateIdentifierValueFromPlatform("Wix4NetfxBundleExtension", this.Context.Platform, BurnPlatforms.X86 | BurnPlatforms.X64 | BurnPlatforms.ARM64); | ||
507 | if (bundleExtensionId == null) | ||
508 | { | ||
509 | this.Messaging.Write(ErrorMessages.UnsupportedPlatformForElement(sourceLineNumbers, this.Context.Platform.ToString(), element.Name.LocalName)); | ||
510 | } | ||
511 | |||
512 | if (!this.Messaging.EncounteredError) | ||
513 | { | ||
514 | this.ParseHelper.CreateWixSearchSymbol(section, sourceLineNumbers, element.Name.LocalName, id, variable, condition, after, bundleExtensionId); | ||
515 | |||
516 | section.AddSymbol(new NetFxNetCoreSdkFeatureBandSearchSymbol(sourceLineNumbers, id) | ||
517 | { | ||
518 | Platform = platform.Value, | ||
519 | MajorVersion = majorVersion, | ||
520 | MinorVersion = minorVersion, | ||
521 | PatchVersion = patchVersion, | ||
522 | }); | ||
523 | } | ||
524 | } | ||
525 | |||
526 | private void ParseDotNetCoreSdkFeatureBandSearchRefElement(Intermediate intermediate, IntermediateSection section, XElement element) | ||
527 | { | ||
528 | var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element); | ||
529 | |||
530 | foreach (var attrib in element.Attributes()) | ||
531 | { | ||
532 | if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace) | ||
533 | { | ||
534 | switch (attrib.Name.LocalName) | ||
535 | { | ||
536 | case "Id": | ||
537 | var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib); | ||
538 | this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, NetfxSymbolDefinitions.NetFxNetCoreSdkFeatureBandSearch, refId); | ||
539 | break; | ||
540 | default: | ||
541 | this.ParseHelper.UnexpectedAttribute(element, attrib); | ||
542 | break; | ||
543 | } | ||
544 | } | ||
545 | else | ||
546 | { | ||
547 | this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib); | ||
548 | } | ||
549 | } | ||
550 | |||
551 | this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element); | ||
552 | } | ||
553 | |||
394 | /// <summary> | 554 | /// <summary> |
395 | /// Parses a NativeImage element. | 555 | /// Parses a NativeImage element. |
396 | /// </summary> | 556 | /// </summary> |