summaryrefslogtreecommitdiff
path: root/src/ext/NetFx/wixext/NetFxCompiler.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/ext/NetFx/wixext/NetFxCompiler.cs')
-rw-r--r--src/ext/NetFx/wixext/NetFxCompiler.cs213
1 files changed, 211 insertions, 2 deletions
diff --git a/src/ext/NetFx/wixext/NetFxCompiler.cs b/src/ext/NetFx/wixext/NetFxCompiler.cs
index 739618e9..f3c91918 100644
--- a/src/ext/NetFx/wixext/NetFxCompiler.cs
+++ b/src/ext/NetFx/wixext/NetFxCompiler.cs
@@ -40,7 +40,6 @@ namespace WixToolset.Netfx
40 break; 40 break;
41 } 41 }
42 break; 42 break;
43 case "Bundle":
44 case "Fragment": 43 case "Fragment":
45 switch (element.Name.LocalName) 44 switch (element.Name.LocalName)
46 { 45 {
@@ -50,8 +49,45 @@ namespace WixToolset.Netfx
50 case "DotNetCoreSearchRef": 49 case "DotNetCoreSearchRef":
51 this.ParseDotNetCoreSearchRefElement(intermediate, section, element); 50 this.ParseDotNetCoreSearchRefElement(intermediate, section, element);
52 break; 51 break;
52 case "DotNetCompatibilityCheck":
53 this.ParseDotNetCompatibilityCheckElement(intermediate, section, element);
54 break;
55 case "DotNetCompatibilityCheckRef":
56 this.ParseDotNetCompatibilityCheckRefElement(intermediate, section, element);
57 break;
58 default:
59 this.ParseHelper.UnexpectedElement(parentElement, element);
60 break;
61 }
62 break;
63 case "Bundle":
64 switch (element.Name.LocalName)
65 {
66 case "DotNetCoreSearch":
67 this.ParseDotNetCoreSearchElement(intermediate, section, element);
68 break;
69 case "DotNetCoreSearchRef":
70 this.ParseDotNetCoreSearchRefElement(intermediate, section, element);
71 break;
72 default:
73 this.ParseHelper.UnexpectedElement(parentElement, element);
74 break;
75 }
76 break;
77 case "Package":
78 case "Module":
79 switch (element.Name.LocalName)
80 {
81 case "DotNetCompatibilityCheck":
82 this.ParseDotNetCompatibilityCheckElement(intermediate, section, element);
83 break;
84 case "DotNetCompatibilityCheckRef":
85 this.ParseDotNetCompatibilityCheckRefElement(intermediate, section, element);
86 break;
87 default:
88 this.ParseHelper.UnexpectedElement(parentElement, element);
89 break;
53 } 90 }
54
55 break; 91 break;
56 default: 92 default:
57 this.ParseHelper.UnexpectedElement(parentElement, element); 93 this.ParseHelper.UnexpectedElement(parentElement, element);
@@ -325,5 +361,178 @@ namespace WixToolset.Netfx
325 }); 361 });
326 } 362 }
327 } 363 }
364
365 /// <summary>
366 /// Parses a DotNetCompatibilityCheck element.
367 /// </summary>
368 /// <param name="element">The element to parse.</param>
369 private void ParseDotNetCompatibilityCheckElement(Intermediate intermediate, IntermediateSection section, XElement element)
370 {
371 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
372 Identifier id = null;
373 string property = null;
374 string runtimeType = null;
375 string platform = null;
376 string version = null;
377 string rollForward = "Minor";
378
379 foreach (var attrib in element.Attributes())
380 {
381 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
382 {
383 switch (attrib.Name.LocalName)
384 {
385 case "Id":
386 id = this.ParseHelper.GetAttributeIdentifier(sourceLineNumbers, attrib);
387 break;
388 case "Property":
389 property = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
390 break;
391 case "RuntimeType":
392 runtimeType = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
393 switch (runtimeType.ToLower())
394 {
395 case "aspnet":
396 runtimeType = "Microsoft.AspNetCore.App";
397 break;
398 case "desktop":
399 runtimeType = "Microsoft.WindowsDesktop.App";
400 break;
401 case "core":
402 runtimeType = "Microsoft.NETCore.App";
403 break;
404 default:
405 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName, runtimeType, "aspnet", "desktop", "core"));
406 break;
407 }
408 break;
409 case "Platform":
410 platform = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
411 switch (platform.ToLower())
412 {
413 case "x86":
414 case "x64":
415 case "arm64":
416 platform = platform.ToLower();
417 break;
418 default:
419 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName, platform, "x86", "x64", "arm64"));
420 break;
421 }
422 break;
423 case "Version":
424 version = this.ParseHelper.GetAttributeVersionValue(sourceLineNumbers, attrib);
425 break;
426 case "RollForward":
427 rollForward = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
428 switch (rollForward.ToLower())
429 {
430 case "latestmajor":
431 rollForward = "LatestMajor";
432 break;
433 case "major":
434 rollForward = "Major";
435 break;
436 case "latestminor":
437 rollForward = "LatestMinor";
438 break;
439 case "minor":
440 rollForward = "Minor";
441 break;
442 case "latestpatch":
443 rollForward = "LatestPatch";
444 break;
445 case "disable":
446 rollForward = "Disable";
447 break;
448 default:
449 this.Messaging.Write(ErrorMessages.IllegalAttributeValue(sourceLineNumbers, element.Name.LocalName, attrib.Name.LocalName, rollForward, "latestmajor", "major", "latestminor", "minor", "latestpatch", "disable"));
450 break;
451 }
452 break;
453 default:
454 this.ParseHelper.UnexpectedAttribute(element, attrib);
455 break;
456 }
457 }
458 else
459 {
460 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
461 }
462 }
463
464 if (null == id)
465 {
466 id = this.ParseHelper.CreateIdentifier("ndncc", property, runtimeType, platform, version);
467 }
468
469 if (String.IsNullOrEmpty(property))
470 {
471 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Property"));
472 }
473
474 if (String.IsNullOrEmpty(runtimeType))
475 {
476 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "RuntimeType"));
477 }
478
479 if (String.IsNullOrEmpty(platform))
480 {
481 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Platform"));
482 }
483
484 if (String.IsNullOrEmpty(version))
485 {
486 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Version"));
487 }
488
489 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
490
491 this.ParseHelper.CreateCustomActionReference(sourceLineNumbers, section, "Wix4NetFxDotNetCompatibilityCheck", this.Context.Platform, CustomActionPlatforms.ARM64 | CustomActionPlatforms.X64 | CustomActionPlatforms.X86);
492
493 if (!this.Messaging.EncounteredError)
494 {
495 section.AddSymbol(new NetFxDotNetCompatibilityCheckSymbol(sourceLineNumbers, id)
496 {
497 RuntimeType = runtimeType,
498 Platform = platform,
499 Version = version,
500 RollForward = rollForward,
501 Property = property,
502 });
503 }
504 }
505
506 /// <summary>
507 /// Parses a DotNetCompatibilityCheckRef element.
508 /// </summary>
509 /// <param name="element">The element to parse.</param>
510 private void ParseDotNetCompatibilityCheckRefElement(Intermediate intermediate, IntermediateSection section, XElement element)
511 {
512 var sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
513
514 foreach (var attrib in element.Attributes())
515 {
516 if (String.IsNullOrEmpty(attrib.Name.NamespaceName) || this.Namespace == attrib.Name.Namespace)
517 {
518 switch (attrib.Name.LocalName)
519 {
520 case "Id":
521 var refId = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
522 this.ParseHelper.CreateSimpleReference(section, sourceLineNumbers, NetfxSymbolDefinitions.NetFxDotNetCompatibilityCheck, refId);
523 break;
524 default:
525 this.ParseHelper.UnexpectedAttribute(element, attrib);
526 break;
527 }
528 }
529 else
530 {
531 this.ParseHelper.ParseExtensionAttribute(this.Context.Extensions, intermediate, section, element, attrib);
532 }
533 }
534
535 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
536 }
328 } 537 }
329} 538}