@joebigelow / wix / commits / fbc08174

Update to latest tools and changes from those tools

Rob Mensching committed May 9, 2019 at 08:57 UTC fbc081741b9923868ebf4aeb98f1e678f5fb6d97
5 files changed +64 -70
src/test/WixToolsetTest.Util/WixToolsetTest.Util.csproj
+7 -4
@@ -1,4 +1,4 @@
1 -<?xml version="1.0" encoding="utf-8"?>
1 +<?xml version="1.0" encoding="utf-8"?>
2 <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3
4 <Project Sdk="Microsoft.NET.Sdk">
@@ -23,7 +23,10 @@
23 </ItemGroup>
24
25 <ItemGroup>
26 - <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" PrivateAssets="all" />
26 + <PackageReference Include="WixToolset.Core" Version="4.0.*" />
27 + <PackageReference Include="WixToolset.Core.Burn" Version="4.0.*" />
28 + <PackageReference Include="WixToolset.Core.WindowsInstaller" Version="4.0.*" />
29 + <PackageReference Include="WixToolset.Core.TestPackage" Version="4.0.*" />
30 </ItemGroup>
31
32 <ItemGroup>
@@ -32,7 +35,7 @@
35
36 <ItemGroup>
37 <PackageReference Include="Microsoft.NET.Test.Sdk" Version="15.5.0" />
35 - <PackageReference Include="xunit" Version="2.4.0" />
36 - <PackageReference Include="xunit.runner.visualstudio" Version="2.4.0" />
38 + <PackageReference Include="xunit" Version="2.4.1" />
39 + <PackageReference Include="xunit.runner.visualstudio" Version="2.4.1" PrivateAssets="All" />
40 </ItemGroup>
41 </Project>
src/test/WixToolsetTest.Util/WixToolsetTest.Util.v3.ncrunchproject new
+5
@@ -0,0 +1,5 @@
1 +<ProjectConfiguration>
2 + <Settings>
3 + <CopyReferencedAssembliesToWorkspace>True</CopyReferencedAssembliesToWorkspace>
4 + </Settings>
5 +</ProjectConfiguration>
\ No newline at end of file
src/wixext/UtilCompiler.cs
+49 -63
@@ -11,6 +11,7 @@ namespace WixToolset.Util
11 using System.Text.RegularExpressions;
12 using System.Xml.Linq;
13 using WixToolset.Data;
14 + using WixToolset.Data.Tuples;
15 using WixToolset.Extensibility;
16 using WixToolset.Extensibility.Data;
17
@@ -146,9 +147,9 @@ namespace WixToolset.Util
147 /// <param name="parentElement">Parent element of element to process.</param>
148 /// <param name="element">Element to process.</param>
149 /// <param name="contextValues">Extra information about the context in which this element is being parsed.</param>
149 - public override ComponentKeyPath ParsePossibleKeyPathElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
150 + public override IComponentKeyPath ParsePossibleKeyPathElement(Intermediate intermediate, IntermediateSection section, XElement parentElement, XElement element, IDictionary<string, string> context)
151 {
151 - ComponentKeyPath possibleKeyPath = null;
152 + IComponentKeyPath possibleKeyPath = null;
153
154 switch (parentElement.Name.LocalName)
155 {
@@ -549,7 +550,7 @@ namespace WixToolset.Util
550 /// </summary>
551 /// <param name="element">Element to parse.</param>
552 /// <param name="componentId">Identifier of parent component.</param>
552 - private ComponentKeyPath ParseEventSourceElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
553 + private IComponentKeyPath ParseEventSourceElement(Intermediate intermediate, IntermediateSection section, XElement element, string componentId)
554 {
555 SourceLineNumber sourceLineNumbers = this.ParseHelper.GetSourceLineNumbers(element);
556 string sourceName = null;
@@ -568,7 +569,7 @@ namespace WixToolset.Util
569 switch (attrib.Name.LocalName)
570 {
571 case "CategoryCount":
571 - categoryCount = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
572 + categoryCount = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
573 break;
574 case "CategoryMessageFile":
575 categoryMessageFile = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -660,31 +661,34 @@ namespace WixToolset.Util
661
662 this.ParseHelper.ParseForExtensionElements(this.Context.Extensions, intermediate, section, element);
663
663 - int registryRoot = 2; // MsiInterop.MsidbRegistryRootLocalMachine
664 - string eventSourceKey = String.Format(@"SYSTEM\CurrentControlSet\Services\EventLog\{0}\{1}", logName, sourceName);
665 - Identifier id = this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, eventSourceKey, "EventMessageFile", String.Concat("#%", eventMessageFile), componentId, false);
664 + string eventSourceKey = $@"SYSTEM\CurrentControlSet\Services\EventLog\{logName}\{sourceName}";
665 + Identifier id = this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, eventSourceKey, "EventMessageFile", String.Concat("#%", eventMessageFile), componentId, false);
666
667 if (null != categoryMessageFile)
668 {
669 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, eventSourceKey, "CategoryMessageFile", String.Concat("#%", categoryMessageFile), componentId, false);
669 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, eventSourceKey, "CategoryMessageFile", String.Concat("#%", categoryMessageFile), componentId, false);
670 }
671
672 if (CompilerConstants.IntegerNotSet != categoryCount)
673 {
674 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, eventSourceKey, "CategoryCount", String.Concat("#", categoryCount), componentId, false);
674 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, eventSourceKey, "CategoryCount", String.Concat("#", categoryCount), componentId, false);
675 }
676
677 if (null != parameterMessageFile)
678 {
679 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, eventSourceKey, "ParameterMessageFile", String.Concat("#%", parameterMessageFile), componentId, false);
679 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, eventSourceKey, "ParameterMessageFile", String.Concat("#%", parameterMessageFile), componentId, false);
680 }
681
682 if (0 != typesSupported)
683 {
684 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, eventSourceKey, "TypesSupported", String.Concat("#", typesSupported), componentId, false);
684 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, eventSourceKey, "TypesSupported", String.Concat("#", typesSupported), componentId, false);
685 }
686
687 - return new ComponentKeyPath() { Id = id.Id, Explicit = isKeyPath, Type = ComponentKeyPathType.Registry };
687 + var componentKeyPath = this.CreateComponentKeyPath();
688 + componentKeyPath.Id = id.Id;
689 + componentKeyPath.Explicit = isKeyPath;
690 + componentKeyPath.Type = PossibleKeyPathType.Registry;
691 + return componentKeyPath;
692 }
693
694 /// <summary>
@@ -720,10 +724,10 @@ namespace WixToolset.Util
724 property = this.ParseHelper.GetAttributeIdentifierValue(sourceLineNumbers, attrib);
725 break;
726 case "Sequence":
723 - sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
727 + sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
728 break;
729 case "Timeout":
726 - timeout = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
730 + timeout = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
731 break;
732 case "Target":
733 target = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -789,7 +793,7 @@ namespace WixToolset.Util
793 }
794 break;
795 case "TerminateProcess":
792 - terminateExitCode = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
796 + terminateExitCode = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
797 attributes |= 0x20; // CLOSEAPP_ATTRIBUTE_TERMINATEPROCESS
798 break;
799 default:
@@ -1273,7 +1277,7 @@ namespace WixToolset.Util
1277 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "User"));
1278 }
1279
1276 - if (int.MinValue == permission) // just GENERIC_READ, which is MSI_NULL
1280 + if (Int32.MinValue == permission) // just GENERIC_READ, which is MSI_NULL
1281 {
1282 this.Messaging.Write(ErrorMessages.GenericReadNotAllowed(sourceLineNumbers));
1283 }
@@ -1427,7 +1431,7 @@ namespace WixToolset.Util
1431 iconFile = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
1432 break;
1433 case "IconIndex":
1430 - iconIndex = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
1434 + iconIndex = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
1435 break;
1436 default:
1437 this.ParseHelper.UnexpectedAttribute(element, attrib);
@@ -1481,7 +1485,7 @@ namespace WixToolset.Util
1485
1486 if (!this.Messaging.EncounteredError)
1487 {
1484 - CreateWixInternetShortcut(intermediate, section, sourceLineNumbers, componentId, directoryId, id, name, target, shortcutType, iconFile, iconIndex);
1488 + this.CreateWixInternetShortcut(section, sourceLineNumbers, componentId, directoryId, id, name, target, shortcutType, iconFile, iconIndex);
1489 }
1490 }
1491
@@ -1495,7 +1499,7 @@ namespace WixToolset.Util
1499 /// <param name="id">Identifier of shortcut.</param>
1500 /// <param name="name">Name of shortcut without extension.</param>
1501 /// <param name="target">Target URL of shortcut.</param>
1498 - public void CreateWixInternetShortcut(Intermediate intermediate, IntermediateSection section, SourceLineNumber sourceLineNumbers, string componentId, string directoryId, string shortcutId, string name, string target, InternetShortcutType type, string iconFile, int iconIndex)
1502 + private void CreateWixInternetShortcut(IntermediateSection section, SourceLineNumber sourceLineNumbers, string componentId, string directoryId, string shortcutId, string name, string target, InternetShortcutType type, string iconFile, int iconIndex)
1503 {
1504 // add the appropriate extension based on type of shortcut
1505 name = String.Concat(name, InternetShortcutType.Url == type ? ".url" : ".lnk");
@@ -1687,20 +1691,19 @@ namespace WixToolset.Util
1691 row.Set(4, sbSymbolicConstants.ToString());
1692
1693 // Set up the application's performance key.
1690 - int registryRoot = 2; // HKLM
1694 string escapedName = UtilCompiler.FindPropertyBrackets.Replace(name, this.EscapeProperties);
1695 string linkageKey = String.Format(@"SYSTEM\CurrentControlSet\Services\{0}\Linkage", escapedName);
1696 string performanceKey = String.Format(@"SYSTEM\CurrentControlSet\Services\{0}\Performance", escapedName);
1697
1695 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, linkageKey, "Export", escapedName, componentId, false);
1696 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "-", null, componentId, false);
1697 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Library", library, componentId, false);
1698 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Open", openEntryPoint, componentId, false);
1699 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Collect", collectEntryPoint, componentId, false);
1700 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Close", closeEntryPoint, componentId, false);
1701 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "IsMultiInstance", YesNoType.Yes == multiInstance ? "#1" : "#0", componentId, false);
1702 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Counter Names", sbCounterNames.ToString(), componentId, false);
1703 - this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, registryRoot, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false);
1698 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, linkageKey, "Export", escapedName, componentId, false);
1699 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "-", null, componentId, false);
1700 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Library", library, componentId, false);
1701 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Open", openEntryPoint, componentId, false);
1702 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Collect", collectEntryPoint, componentId, false);
1703 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Close", closeEntryPoint, componentId, false);
1704 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "IsMultiInstance", YesNoType.Yes == multiInstance ? "#1" : "#0", componentId, false);
1705 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Names", sbCounterNames.ToString(), componentId, false);
1706 + this.ParseHelper.CreateRegistryRow(section, sourceLineNumbers, RegistryRootType.LocalMachine, performanceKey, "Counter Types", sbCounterTypes.ToString(), componentId, false);
1707 }
1708
1709 // Reference InstallPerfCounterData and UninstallPerfCounterData since nothing will happen without them
@@ -2523,7 +2526,7 @@ namespace WixToolset.Util
2526 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "User"));
2527 }
2528
2526 - if (int.MinValue == permission) // just GENERIC_READ, which is MSI_NULL
2529 + if (Int32.MinValue == permission) // just GENERIC_READ, which is MSI_NULL
2530 {
2531 this.Messaging.Write(ErrorMessages.GenericReadNotAllowed(sourceLineNumbers));
2532 }
@@ -2694,7 +2697,7 @@ namespace WixToolset.Util
2697 string variable = null;
2698 string condition = null;
2699 string after = null;
2697 - int root = CompilerConstants.IntegerNotSet;
2700 + RegistryRootType? root = null;
2701 string key = null;
2702 string value = null;
2703 YesNoType expand = YesNoType.NotSet;
@@ -2715,7 +2718,7 @@ namespace WixToolset.Util
2718 this.ParseCommonSearchAttributes(sourceLineNumbers, attrib, ref id, ref variable, ref condition, ref after);
2719 break;
2720 case "Root":
2718 - root = this.ParseHelper.GetAttributeMsidbRegistryRootValue(sourceLineNumbers, attrib, false);
2721 + root = this.ParseHelper.GetAttributeRegistryRootValue(sourceLineNumbers, attrib, false);
2722 break;
2723 case "Key":
2724 key = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -2764,7 +2767,7 @@ namespace WixToolset.Util
2767 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Variable"));
2768 }
2769
2767 - if (CompilerConstants.IntegerNotSet == root)
2770 + if (!root.HasValue)
2771 {
2772 this.Messaging.Write(ErrorMessages.ExpectedAttribute(sourceLineNumbers, element.Name.LocalName, "Root"));
2773 }
@@ -2834,7 +2837,7 @@ namespace WixToolset.Util
2837 }
2838
2839 var row = this.ParseHelper.CreateRow(section, sourceLineNumbers, "WixRegistrySearch", id);
2837 - row.Set(1, root);
2840 + row.Set(1, (int)root);
2841 row.Set(2, key);
2842 row.Set(3, value);
2843 row.Set(4, (int)attributes);
@@ -3044,10 +3047,10 @@ namespace WixToolset.Util
3047 rebootMessage = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
3048 break;
3049 case "ResetPeriodInDays":
3047 - resetPeriod = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
3050 + resetPeriod = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
3051 break;
3052 case "RestartServiceDelayInSeconds":
3050 - restartServiceDelay = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, int.MaxValue);
3053 + restartServiceDelay = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 0, Int32.MaxValue);
3054 break;
3055 case "SecondFailureActionType":
3056 secondFailureActionType = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -3511,7 +3514,7 @@ namespace WixToolset.Util
3514 }
3515 break;
3516 case "Sequence":
3514 - sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, short.MaxValue);
3517 + sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue);
3518 break;
3519 case "Value":
3520 value = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -3700,7 +3703,7 @@ namespace WixToolset.Util
3703 }
3704 break;
3705 case "Sequence":
3703 - sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, short.MaxValue);
3706 + sequence = this.ParseHelper.GetAttributeIntegerValue(sourceLineNumbers, attrib, 1, Int16.MaxValue);
3707 break;
3708 case "Value":
3709 value = this.ParseHelper.GetAttributeValue(sourceLineNumbers, attrib);
@@ -3874,38 +3877,21 @@ namespace WixToolset.Util
3877 /// </summary>
3878 private class ParsedPerformanceCounter
3879 {
3877 - string name;
3878 - string help;
3879 - int type;
3880 - string language;
3881 -
3880 internal ParsedPerformanceCounter(string name, string help, System.Diagnostics.PerformanceCounterType type, int language)
3881 {
3884 - this.name = name;
3885 - this.help = help;
3886 - this.type = (int)type;
3887 - this.language = language.ToString("D3", CultureInfo.InvariantCulture);
3882 + this.Name = name;
3883 + this.Help = help;
3884 + this.Type = (int)type;
3885 + this.Language = language.ToString("D3", CultureInfo.InvariantCulture);
3886 }
3887
3890 - internal string Name
3891 - {
3892 - get { return this.name; }
3893 - }
3888 + internal string Name { get; }
3889
3895 - internal string Help
3896 - {
3897 - get { return this.help; }
3898 - }
3890 + internal string Help { get; }
3891
3900 - internal int Type
3901 - {
3902 - get { return this.type; }
3903 - }
3892 + internal int Type { get; }
3893
3905 - internal string Language
3906 - {
3907 - get { return this.language; }
3908 - }
3894 + internal string Language { get; }
3895 }
3896 }
3897 }
src/wixlib/packages.config
+1 -1
@@ -1,5 +1,5 @@
1 <?xml version="1.0" encoding="utf-8"?>
2 <packages>
3 <package id="Nerdbank.GitVersioning" version="2.1.65" developmentDependency="true" targetFramework="net40" />
4 - <package id="WixToolset.MSBuild" version="4.0.0-build-0005" developmentDependency="true" targetFramework="net40" />
4 + <package id="WixToolset.MSBuild" version="4.0.0-build-0043" developmentDependency="true" targetFramework="net40" />
5 </packages>
\ No newline at end of file
src/wixlib/util.wixproj
+2 -2
@@ -1,7 +1,7 @@
1 <?xml version="1.0" encoding="utf-8"?>
2 <!-- Copyright (c) .NET Foundation and contributors. All rights reserved. Licensed under the Microsoft Reciprocal License. See LICENSE.TXT file in the project root for full license information. -->
3 <Project DefaultTargets="Build" InitialTargets="EnsureWixToolsetInstalled" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="15.0">
4 - <Import Project="..\..\packages\WixToolset.MSBuild.4.0.0-build-0005\build\WixToolset.MSBuild.props" Condition="Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0005\build\WixToolset.MSBuild.props')" />
4 + <Import Project="..\..\packages\WixToolset.MSBuild.4.0.0-build-0043\build\WixToolset.MSBuild.props" Condition="Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0043\build\WixToolset.MSBuild.props')" />
5 <Import Project="..\FindLocalWix.props" />
6 <PropertyGroup>
7 <ProjectGuid>{1ACFFEFD-505A-41A5-ACBF-A02B7B473AA2}</ProjectGuid>
@@ -46,7 +46,7 @@
46 <ErrorText>This project references NuGet package(s) that are missing on this computer. Use NuGet Package Restore to download them. For more information, see http://go.microsoft.com/fwlink/?LinkID=322105. The missing file is {0}.</ErrorText>
47 </PropertyGroup>
48 <Error Condition="!Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets'))" />
49 - <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0005\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0005\build\WixToolset.MSBuild.props'))" />
49 + <Error Condition="!Exists('..\..\packages\WixToolset.MSBuild.4.0.0-build-0043\build\WixToolset.MSBuild.props')" Text="$([System.String]::Format('$(ErrorText)', '..\..\packages\WixToolset.MSBuild.4.0.0-build-0043\build\WixToolset.MSBuild.props'))" />
50 </Target>
51 <Import Project="..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets" Condition="Exists('..\..\packages\Nerdbank.GitVersioning.2.1.65\build\Nerdbank.GitVersioning.targets')" />
52 </Project>