aboutsummaryrefslogtreecommitdiff
path: root/src/internal
diff options
context:
space:
mode:
authorRob Mensching <rob@firegiant.com>2022-10-12 22:01:55 -0700
committerRob Mensching <rob@firegiant.com>2022-10-14 20:13:50 -0700
commit07b3d459ea0a45cbef29b98d283edafbab26462a (patch)
tree1e834882038ba3862f8acb7b60e7a4bfaef793fd /src/internal
parent5567239a9411aac769a34f2c65b80a523a577ad7 (diff)
downloadwix-07b3d459ea0a45cbef29b98d283edafbab26462a.tar.gz
wix-07b3d459ea0a45cbef29b98d283edafbab26462a.tar.bz2
wix-07b3d459ea0a45cbef29b98d283edafbab26462a.zip
Normalize ToolsetTask implementation to call wix.exe and heat.exe
Share the ToolsetTask implementation that can find .NET Core and .NET Framework with multiple architectures. Fixes 6951
Diffstat (limited to 'src/internal')
-rw-r--r--src/internal/SetBuildNumber/Directory.Packages.props.pp1
-rw-r--r--src/internal/WixToolset.BaseBuildTasks.Sources/BaseToolsetTask.cs178
-rw-r--r--src/internal/WixToolset.BaseBuildTasks.Sources/FileSearchHelperMethods.cs57
-rw-r--r--src/internal/WixToolset.BaseBuildTasks.Sources/WixCommandLineBuilder.cs177
-rw-r--r--src/internal/WixToolset.BaseBuildTasks.Sources/WixToolset.BaseBuildTasks.Sources.csproj36
-rw-r--r--src/internal/internal.cmd2
-rw-r--r--src/internal/internal.sln22
-rw-r--r--src/internal/internal_t.proj1
8 files changed, 472 insertions, 2 deletions
diff --git a/src/internal/SetBuildNumber/Directory.Packages.props.pp b/src/internal/SetBuildNumber/Directory.Packages.props.pp
index d06990fe..e1df6f8e 100644
--- a/src/internal/SetBuildNumber/Directory.Packages.props.pp
+++ b/src/internal/SetBuildNumber/Directory.Packages.props.pp
@@ -8,6 +8,7 @@
8 8
9 <PackageVersion Include="WixBuildTools.TestSupport" Version="{packageversion}" /> 9 <PackageVersion Include="WixBuildTools.TestSupport" Version="{packageversion}" />
10 <PackageVersion Include="WixBuildTools.TestSupport.Native" Version="{packageversion}" /> 10 <PackageVersion Include="WixBuildTools.TestSupport.Native" Version="{packageversion}" />
11 <PackageVersion Include="WixToolset.BaseBuildTasks.Sources" Version="{packageversion}" />
11 12
12 <PackageVersion Include="WixToolset.DUtil" Version="{packageversion}" /> 13 <PackageVersion Include="WixToolset.DUtil" Version="{packageversion}" />
13 <PackageVersion Include="WixToolset.WcaUtil" Version="{packageversion}" /> 14 <PackageVersion Include="WixToolset.WcaUtil" Version="{packageversion}" />
diff --git a/src/internal/WixToolset.BaseBuildTasks.Sources/BaseToolsetTask.cs b/src/internal/WixToolset.BaseBuildTasks.Sources/BaseToolsetTask.cs
new file mode 100644
index 00000000..d9e3b5e8
--- /dev/null
+++ b/src/internal/WixToolset.BaseBuildTasks.Sources/BaseToolsetTask.cs
@@ -0,0 +1,178 @@
1// 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.
2
3namespace WixToolset.BaseBuildTasks
4{
5 using System;
6 using System.IO;
7 using System.Runtime.InteropServices;
8 using Microsoft.Build.Utilities;
9
10 public abstract class BaseToolsetTask : ToolTask
11 {
12 /// <summary>
13 /// Gets or sets additional options that are appended the the tool command-line.
14 /// </summary>
15 /// <remarks>
16 /// This allows the task to support extended options in the tool which are not
17 /// explicitly implemented as properties on the task.
18 /// </remarks>
19 public string AdditionalOptions { get; set; }
20
21 /// <summary>
22 /// Gets or sets whether to display the logo.
23 /// </summary>
24 public bool NoLogo { get; set; }
25
26 /// <summary>
27 /// Gets or sets whether all warnings should be suppressed.
28 /// </summary>
29 public bool SuppressAllWarnings { get; set; }
30
31 /// <summary>
32 /// Gets or sets a list of specific warnings to be suppressed.
33 /// </summary>
34 public string[] SuppressSpecificWarnings { get; set; }
35
36 /// <summary>
37 /// Gets or sets whether all warnings should be treated as errors.
38 /// </summary>
39 public bool TreatWarningsAsErrors { get; set; }
40
41 /// <summary>
42 /// Gets or sets a list of specific warnings to treat as errors.
43 /// </summary>
44 public string[] TreatSpecificWarningsAsErrors { get; set; }
45
46 /// <summary>
47 /// Gets or sets whether to display verbose output.
48 /// </summary>
49 public bool VerboseOutput { get; set; }
50
51 /// <summary>
52 /// Get the path to the executable.
53 /// </summary>
54 /// <remarks>
55 /// ToolTask only calls GenerateFullPathToTool when the ToolPath property is not set.
56 /// WiX never sets the ToolPath property, but the user can through $(WixToolDir).
57 /// If we return only a file name, ToolTask will search the system paths for it.
58 /// </remarks>
59 protected sealed override string GenerateFullPathToTool()
60 {
61 var defaultToolFullPath = this.GetDefaultToolFullPath();
62
63#if NETCOREAPP
64 // If we're pointing at an executable use that.
65 if (IsSelfExecutable(defaultToolFullPath, out var finalToolFullPath))
66 {
67 return finalToolFullPath;
68 }
69
70 // Otherwise, use "dotnet.exe" to run an assembly dll.
71 return Environment.GetEnvironmentVariable("DOTNET_HOST_PATH") ?? "dotnet";
72#else
73 return defaultToolFullPath;
74#endif
75 }
76
77 /// <summary>
78 /// Builds a command line from options in this and derivative tasks.
79 /// </summary>
80 /// <remarks>
81 /// Derivative classes should call BuildCommandLine() on the base class to ensure that common command line options are added to the command.
82 /// </remarks>
83 protected virtual void BuildCommandLine(WixCommandLineBuilder commandLineBuilder)
84 {
85 commandLineBuilder.AppendIfTrue("-nologo", this.NoLogo);
86 commandLineBuilder.AppendArrayIfNotNull("-sw", this.SuppressSpecificWarnings);
87 commandLineBuilder.AppendIfTrue("-sw", this.SuppressAllWarnings);
88 commandLineBuilder.AppendIfTrue("-v", this.VerboseOutput);
89 commandLineBuilder.AppendArrayIfNotNull("-wx", this.TreatSpecificWarningsAsErrors);
90 commandLineBuilder.AppendIfTrue("-wx", this.TreatWarningsAsErrors);
91 commandLineBuilder.AppendTextIfNotNull(this.AdditionalOptions);
92 }
93
94 protected sealed override string GenerateResponseFileCommands()
95 {
96 var commandLineBuilder = new WixCommandLineBuilder();
97 this.BuildCommandLine(commandLineBuilder);
98 return commandLineBuilder.ToString();
99 }
100
101#if NETCOREAPP
102 protected override string GenerateCommandLineCommands()
103 {
104 // If the target tool path is an executable, we don't need to add anything to the command-line.
105 var toolFullPath = this.GetToolFullPath();
106
107 if (IsSelfExecutable(toolFullPath, out var finalToolFullPath))
108 {
109 return null;
110 }
111 else // we're using "dotnet.exe" to run the assembly so add "exec" plus path to the command-line.
112 {
113 return $"exec \"{finalToolFullPath}\"";
114 }
115 }
116
117 private static bool IsSelfExecutable(string proposedToolFullPath, out string finalToolFullPath)
118 {
119 var toolFullPathWithoutExtension = Path.Combine(Path.GetDirectoryName(proposedToolFullPath), Path.GetFileNameWithoutExtension(proposedToolFullPath));
120 var exeExtension = RuntimeInformation.IsOSPlatform(OSPlatform.Windows) ? ".exe" : String.Empty;
121 var exeToolFullPath = $"{toolFullPathWithoutExtension}{exeExtension}";
122 if (File.Exists(exeToolFullPath))
123 {
124 finalToolFullPath = exeToolFullPath;
125 return true;
126 }
127
128 finalToolFullPath = $"{toolFullPathWithoutExtension}.dll";
129 return false;
130 }
131#else
132 private static string GetArchitectureFolder(string baseFolder)
133 {
134 // First try to find a folder that matches this task's architecture.
135 var folder = RuntimeInformation.ProcessArchitecture.ToString().ToLowerInvariant();
136
137 if (Directory.Exists(Path.Combine(baseFolder, folder)))
138 {
139 return folder;
140 }
141
142 // Try to fallback to "x86" folder.
143 if (folder != "x86" && Directory.Exists(Path.Combine(baseFolder, "x86")))
144 {
145 return "x86";
146 }
147
148 // Return empty, even though this isn't likely to be useful.
149 return String.Empty;
150 }
151#endif
152
153 private string GetDefaultToolFullPath()
154 {
155#if NETCOREAPP
156 var thisTaskFolder = Path.GetDirectoryName(typeof(BaseToolsetTask).Assembly.Location);
157
158 return Path.Combine(thisTaskFolder, this.ToolExe);
159#else
160 var thisTaskFolder = Path.GetDirectoryName(new Uri(typeof(BaseToolsetTask).Assembly.CodeBase).AbsolutePath);
161
162 var archFolder = GetArchitectureFolder(thisTaskFolder);
163
164 return Path.Combine(thisTaskFolder, archFolder, this.ToolExe);
165#endif
166 }
167
168 private string GetToolFullPath()
169 {
170 if (String.IsNullOrEmpty(this.ToolPath))
171 {
172 return this.GetDefaultToolFullPath();
173 }
174
175 return Path.Combine(this.ToolPath, this.ToolExe);
176 }
177 }
178}
diff --git a/src/internal/WixToolset.BaseBuildTasks.Sources/FileSearchHelperMethods.cs b/src/internal/WixToolset.BaseBuildTasks.Sources/FileSearchHelperMethods.cs
new file mode 100644
index 00000000..442fedd6
--- /dev/null
+++ b/src/internal/WixToolset.BaseBuildTasks.Sources/FileSearchHelperMethods.cs
@@ -0,0 +1,57 @@
1// 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.
2
3namespace WixToolset.BaseBuildTasks
4{
5 using System;
6 using System.IO;
7
8 /// <summary>
9 /// Contains helper methods on searching for files
10 /// </summary>
11 public static class FileSearchHelperMethods
12 {
13 /// <summary>
14 /// Searches for the existence of a file in multiple directories.
15 /// Search is satisfied if default file path is valid and exists. If not,
16 /// file name is extracted from default path and combined with each of the directories
17 /// looking to see if it exists. If not found, input default path is returned.
18 /// </summary>
19 /// <param name="directories">Array of directories to look in, without filenames in them</param>
20 /// <param name="defaultFullPath">Default path - to use if not found</param>
21 /// <returns>File path if file found. Empty string if not found</returns>
22 public static string SearchFilePaths(string[] directories, string defaultFullPath)
23 {
24 if (String.IsNullOrEmpty(defaultFullPath))
25 {
26 return String.Empty;
27 }
28
29 if (File.Exists(defaultFullPath))
30 {
31 return defaultFullPath;
32 }
33
34 if (directories == null)
35 {
36 return String.Empty;
37 }
38
39 var fileName = Path.GetFileName(defaultFullPath);
40 foreach (var currentPath in directories)
41 {
42 if (String.IsNullOrWhiteSpace(currentPath))
43 {
44 continue;
45 }
46
47 var path = Path.Combine(currentPath, fileName);
48 if (File.Exists(path))
49 {
50 return path;
51 }
52 }
53
54 return String.Empty;
55 }
56 }
57}
diff --git a/src/internal/WixToolset.BaseBuildTasks.Sources/WixCommandLineBuilder.cs b/src/internal/WixToolset.BaseBuildTasks.Sources/WixCommandLineBuilder.cs
new file mode 100644
index 00000000..152992dd
--- /dev/null
+++ b/src/internal/WixToolset.BaseBuildTasks.Sources/WixCommandLineBuilder.cs
@@ -0,0 +1,177 @@
1// 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.
2
3namespace WixToolset.BaseBuildTasks
4{
5 using System;
6 using System.Collections.Generic;
7 using System.Globalization;
8 using System.IO;
9
10 using Microsoft.Build.Framework;
11 using Microsoft.Build.Utilities;
12
13 /// <summary>
14 /// Helper class for appending the command line arguments.
15 /// </summary>
16 public class WixCommandLineBuilder : CommandLineBuilder
17 {
18 internal const int Unspecified = -1;
19
20 /// <summary>
21 /// Append a switch to the command line if the value has been specified.
22 /// </summary>
23 /// <param name="switchName">Switch to append.</param>
24 /// <param name="value">Value specified by the user.</param>
25 public void AppendIfSpecified(string switchName, int value)
26 {
27 if (value != Unspecified)
28 {
29 this.AppendSwitchIfNotNull(switchName, value.ToString(CultureInfo.InvariantCulture));
30 }
31 }
32
33 /// <summary>
34 /// Append a switch to the command line if the condition is true.
35 /// </summary>
36 /// <param name="switchName">Switch to append.</param>
37 /// <param name="condition">Condition specified by the user.</param>
38 public void AppendIfTrue(string switchName, bool condition)
39 {
40 if (condition)
41 {
42 this.AppendSwitch(switchName);
43 }
44 }
45
46 /// <summary>
47 /// Append a switch to the command line if any values in the array have been specified.
48 /// </summary>
49 /// <param name="switchName">Switch to append.</param>
50 /// <param name="values">Values specified by the user.</param>
51 public void AppendArrayIfNotNull(string switchName, IEnumerable<ITaskItem> values)
52 {
53 if (values != null)
54 {
55 foreach (ITaskItem value in values)
56 {
57 this.AppendSwitchIfNotNull(switchName, value);
58 }
59 }
60 }
61
62 /// <summary>
63 /// Append a switch to the command line if any values in the array have been specified.
64 /// </summary>
65 /// <param name="switchName">Switch to append.</param>
66 /// <param name="values">Values specified by the user.</param>
67 public void AppendArrayIfNotNull(string switchName, IEnumerable<string> values)
68 {
69 if (values != null)
70 {
71 foreach (string value in values)
72 {
73 this.AppendSwitchIfNotNull(switchName, value);
74 }
75 }
76 }
77
78 /// <summary>
79 /// Build the extensions argument. Each extension is searched in the current folder, user defined search
80 /// directories (ReferencePath), HintPath, and under Wix Extension Directory in that order.
81 /// The order of precedence is based off of that described in Microsoft.Common.Targets's SearchPaths
82 /// property for the ResolveAssemblyReferences task.
83 /// </summary>
84 /// <param name="extensions">The list of extensions to include.</param>
85 /// <param name="wixExtensionDirectory">Evaluated default folder for Wix Extensions</param>
86 /// <param name="referencePaths">User defined reference directories to search in</param>
87 public void AppendExtensions(ITaskItem[] extensions, string wixExtensionDirectory, string [] referencePaths)
88 {
89 if (extensions == null)
90 {
91 return;
92 }
93
94 foreach (ITaskItem extension in extensions)
95 {
96 string className = extension.GetMetadata("Class");
97
98 string fileName = Path.GetFileName(extension.ItemSpec);
99
100 if (String.IsNullOrEmpty(Path.GetExtension(fileName)))
101 {
102 fileName += ".dll";
103 }
104
105 // First try reference paths
106 var resolvedPath = FileSearchHelperMethods.SearchFilePaths(referencePaths, fileName);
107
108 if (String.IsNullOrEmpty(resolvedPath))
109 {
110 // Now try HintPath
111 resolvedPath = extension.GetMetadata("HintPath");
112
113 if (!File.Exists(resolvedPath))
114 {
115 // Now try the item itself
116 resolvedPath = extension.ItemSpec;
117
118 if (String.IsNullOrEmpty(Path.GetExtension(resolvedPath)))
119 {
120 resolvedPath += ".dll";
121 }
122
123 if (!File.Exists(resolvedPath))
124 {
125 if (!String.IsNullOrEmpty(wixExtensionDirectory))
126 {
127 // Now try the extension directory
128 resolvedPath = Path.Combine(wixExtensionDirectory, Path.GetFileName(resolvedPath));
129 }
130
131 if (!File.Exists(resolvedPath))
132 {
133 // Extension wasn't found, just set it to the extension name passed in
134 resolvedPath = extension.ItemSpec;
135 }
136 }
137 }
138 }
139
140 if (String.IsNullOrEmpty(className))
141 {
142 this.AppendSwitchIfNotNull("-ext ", resolvedPath);
143 }
144 else
145 {
146 this.AppendSwitchIfNotNull("-ext ", className + ", " + resolvedPath);
147 }
148 }
149 }
150
151 /// <summary>
152 /// Append arbitrary text to the command-line if specified.
153 /// </summary>
154 /// <param name="textToAppend">Text to append.</param>
155 public void AppendTextIfNotNull(string textToAppend)
156 {
157 if (!String.IsNullOrEmpty(textToAppend))
158 {
159 this.AppendSpaceIfNotEmpty();
160 this.AppendTextUnquoted(textToAppend);
161 }
162 }
163
164 /// <summary>
165 /// Append arbitrary text to the command-line if specified.
166 /// </summary>
167 /// <param name="textToAppend">Text to append.</param>
168 public void AppendTextIfNotWhitespace(string textToAppend)
169 {
170 if (!String.IsNullOrWhiteSpace(textToAppend))
171 {
172 this.AppendSpaceIfNotEmpty();
173 this.AppendTextUnquoted(textToAppend);
174 }
175 }
176 }
177}
diff --git a/src/internal/WixToolset.BaseBuildTasks.Sources/WixToolset.BaseBuildTasks.Sources.csproj b/src/internal/WixToolset.BaseBuildTasks.Sources/WixToolset.BaseBuildTasks.Sources.csproj
new file mode 100644
index 00000000..6ae5165e
--- /dev/null
+++ b/src/internal/WixToolset.BaseBuildTasks.Sources/WixToolset.BaseBuildTasks.Sources.csproj
@@ -0,0 +1,36 @@
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>
5 <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />
6
7 <PropertyGroup>
8 <TargetFramework>netstandard2.0</TargetFramework>
9 <PackageDescription>WiX Toolset BuildTasks Foundation Sources</PackageDescription>
10 <IsPackable>true</IsPackable>
11 <EnableDefaultItems>false</EnableDefaultItems>
12 <IncludeBuildOutput>false</IncludeBuildOutput>
13 <ContentTargetFolders>contentFiles</ContentTargetFolders>
14 <DisableImplicitFrameworkReferences>true</DisableImplicitFrameworkReferences>
15 <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
16 <GenerateTargetFrameworkAttribute>false</GenerateTargetFrameworkAttribute>
17 <NoWarn>CS8021</NoWarn>
18 <NoBuild>true</NoBuild>
19 <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
20 <SuppressDependenciesWhenPacking>true</SuppressDependenciesWhenPacking>
21 </PropertyGroup>
22
23 <ItemGroup>
24 <Compile Include="*.cs" Pack="true" PackagePath="$(ContentTargetFolders)\cs\netstandard2.0\$(PackageId)\%(RecursiveDir)" />
25 <EmbeddedResource Include="*.resx" Pack="true" PackagePath="$(ContentTargetFolders)\any\any\$(PackageId)\%(RecursiveDir)" />
26 </ItemGroup>
27
28 <ItemGroup>
29 <PackageReference Remove="@(PackageReference)" />
30 </ItemGroup>
31
32 <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
33
34 <Target Name="Compile" />
35 <Target Name="CopyFilesToOutputDirectory" />
36</Project>
diff --git a/src/internal/internal.cmd b/src/internal/internal.cmd
index 9380ce4e..32df26e9 100644
--- a/src/internal/internal.cmd
+++ b/src/internal/internal.cmd
@@ -33,8 +33,10 @@ msbuild internal_t.proj -p:Configuration=%_C% -nologo -warnaserror -bl:%_L%\inte
33@rd /s/q "..\..\build\internal" 2> nul 33@rd /s/q "..\..\build\internal" 2> nul
34@del "..\..\build\artifacts\WixBuildTools.TestSupport.*.nupkg" 2> nul 34@del "..\..\build\artifacts\WixBuildTools.TestSupport.*.nupkg" 2> nul
35@del "..\..\build\artifacts\WixBuildTools.TestSupport.Native.*.nupkg" 2> nul 35@del "..\..\build\artifacts\WixBuildTools.TestSupport.Native.*.nupkg" 2> nul
36@del "..\..\build\artifacts\WixToolset.BaseBuildTasks.Sources.*.nupkg" 2> nul
36@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport" 2> nul 37@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport" 2> nul
37@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport.native" 2> nul 38@rd /s/q "%USERPROFILE%\.nuget\packages\wixbuildtools.testsupport.native" 2> nul
39@rd /s/q "%USERPROFILE%\.nuget\packages\wixtoolset.basebuildtasks.sources" 2> nul
38@exit /b 40@exit /b
39 41
40:end 42:end
diff --git a/src/internal/internal.sln b/src/internal/internal.sln
index 9d4fe69f..fe36efbe 100644
--- a/src/internal/internal.sln
+++ b/src/internal/internal.sln
@@ -1,12 +1,14 @@
1 1
2Microsoft Visual Studio Solution File, Format Version 12.00 2Microsoft Visual Studio Solution File, Format Version 12.00
3# Visual Studio Version 16 3# Visual Studio Version 17
4VisualStudioVersion = 16.6.30114.105 4VisualStudioVersion = 17.3.32929.385
5MinimumVisualStudioVersion = 10.0.40219.1 5MinimumVisualStudioVersion = 10.0.40219.1
6Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixBuildTools.TestSupport", "WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj", "{8E082709-7355-41D5-AF86-6BBF9C89BDD7}" 6Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixBuildTools.TestSupport", "WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj", "{8E082709-7355-41D5-AF86-6BBF9C89BDD7}"
7EndProject 7EndProject
8Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WixBuildTools.TestSupport.Native", "WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj", "{95BABD97-FBDB-453A-AF8A-FA031A07B599}" 8Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "WixBuildTools.TestSupport.Native", "WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj", "{95BABD97-FBDB-453A-AF8A-FA031A07B599}"
9EndProject 9EndProject
10Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "WixToolset.BaseBuildTasks.Sources", "WixToolset.BaseBuildTasks.Sources\WixToolset.BaseBuildTasks.Sources.csproj", "{6B654490-AB0D-4F94-B564-DAA80044D5A3}"
11EndProject
10Global 12Global
11 GlobalSection(SolutionConfigurationPlatforms) = preSolution 13 GlobalSection(SolutionConfigurationPlatforms) = preSolution
12 Debug|Any CPU = Debug|Any CPU 14 Debug|Any CPU = Debug|Any CPU
@@ -47,6 +49,22 @@ Global
47 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x64.ActiveCfg = Release|Win32 49 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x64.ActiveCfg = Release|Win32
48 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x86.ActiveCfg = Release|Win32 50 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x86.ActiveCfg = Release|Win32
49 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x86.Build.0 = Release|Win32 51 {95BABD97-FBDB-453A-AF8A-FA031A07B599}.Release|x86.Build.0 = Release|Win32
52 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
53 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|Any CPU.Build.0 = Debug|Any CPU
54 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|ARM64.ActiveCfg = Debug|Any CPU
55 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|ARM64.Build.0 = Debug|Any CPU
56 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|x64.ActiveCfg = Debug|Any CPU
57 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|x64.Build.0 = Debug|Any CPU
58 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|x86.ActiveCfg = Debug|Any CPU
59 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Debug|x86.Build.0 = Debug|Any CPU
60 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|Any CPU.ActiveCfg = Release|Any CPU
61 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|Any CPU.Build.0 = Release|Any CPU
62 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|ARM64.ActiveCfg = Release|Any CPU
63 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|ARM64.Build.0 = Release|Any CPU
64 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|x64.ActiveCfg = Release|Any CPU
65 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|x64.Build.0 = Release|Any CPU
66 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|x86.ActiveCfg = Release|Any CPU
67 {6B654490-AB0D-4F94-B564-DAA80044D5A3}.Release|x86.Build.0 = Release|Any CPU
50 EndGlobalSection 68 EndGlobalSection
51 GlobalSection(SolutionProperties) = preSolution 69 GlobalSection(SolutionProperties) = preSolution
52 HideSolutionNode = FALSE 70 HideSolutionNode = FALSE
diff --git a/src/internal/internal_t.proj b/src/internal/internal_t.proj
index fda67786..fc4956d2 100644
--- a/src/internal/internal_t.proj
+++ b/src/internal/internal_t.proj
@@ -1,5 +1,6 @@
1<Project Sdk="Microsoft.Build.Traversal"> 1<Project Sdk="Microsoft.Build.Traversal">
2 <ItemGroup> 2 <ItemGroup>
3 <ProjectReference Include="WixToolset.BaseBuildTasks.Sources\WixToolset.BaseBuildTasks.Sources.csproj" Targets="Pack" />
3 <ProjectReference Include="WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj" Targets="Pack" /> 4 <ProjectReference Include="WixBuildTools.TestSupport\WixBuildTools.TestSupport.csproj" Targets="Pack" />
4 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x86" /> 5 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x86" />
5 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x64" /> 6 <ProjectReference Include="WixBuildTools.TestSupport.Native\WixBuildTools.TestSupport.Native.vcxproj" Properties="Platform=x64" />