@joebigelow / wix / commits / bbc176de

WiX v5 uses `wixext5` NuGet package subdirectory.

Fixes wixtoolset/issues#7709.

Bob Arnson committed Feb 17, 2024 at 18:38 UTC bbc176de36987255f3e9ab10c002c22ffe8a9a7e
6 files changed +58 -9
src/ext/WixExt.props
+1 -1
@@ -10,7 +10,7 @@
10
11 <ItemGroup>
12 <Content Include="$(MSBuildProjectName).targets" PackagePath="build" />
13 - <Content Include="$(TargetPath)" PackagePath="wixext4" />
13 + <Content Include="$(TargetPath)" PackagePath="wixext5" />
14
15 <PackageReference Include="WixToolset.Extensibility" PrivateAssets="all" />
16 </ItemGroup>
src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs
+12 -2
@@ -29,12 +29,16 @@ namespace WixToolset.Core.ExtensionCache
29 {
30 this.Messaging = messaging;
31 this.ExtensionManager = extensionManager;
32 +
33 + this.WixVersion = typeof(ExtensionCacheManager).Assembly.GetName().Version.Major.ToString();
34 }
35
36 private IMessaging Messaging { get; }
37
38 private IExtensionManager ExtensionManager { get; }
39
40 + public string WixVersion { get; }
41 +
42 public async Task<bool> AddAsync(bool global, string extension, CancellationToken cancellationToken)
43 {
44 if (String.IsNullOrEmpty(extension))
@@ -212,11 +216,16 @@ namespace WixToolset.Core.ExtensionCache
216 {
217 stream.Position = 0;
218
215 - Directory.CreateDirectory(extensionFolder);
216 -
219 using (var archive = new PackageArchiveReader(stream))
220 {
221 var files = archive.GetFiles(extensionPackageRootFolderName);
222 + if (!files.Any())
223 + {
224 + this.Messaging.Write(ExtensionCacheWarnings.MissingExtensionPackageRootFolder(id, nugetVersion.ToString(), extensionPackageRootFolderName, this.WixVersion));
225 + return false;
226 + }
227 +
228 + Directory.CreateDirectory(extensionFolder);
229 await archive.CopyFilesAsync(extensionFolder, files, this.ExtractProgress, logger, cancellationToken);
230 }
231
@@ -266,6 +275,7 @@ namespace WixToolset.Core.ExtensionCache
275 var extensionFolder = Path.Combine(baseFolder, extensionId, extensionVersion, packageRootFolderName);
276 if (!Directory.Exists(extensionFolder))
277 {
278 + this.Messaging.Write(ExtensionCacheWarnings.MissingExtensionPackageRootFolder(extensionId, extensionVersion, packageRootFolderName, this.WixVersion));
279 return false;
280 }
281
src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs
+6
@@ -11,6 +11,11 @@ namespace WixToolset.Core.ExtensionCache
11 return Message(new SourceLineNumber(extensionId), Ids.NugetException, "{0}", exceptionMessage);
12 }
13
14 + public static Message MissingExtensionPackageRootFolder(string extensionId, string packageVersion, string packageRootFolderName, string wixVersion)
15 + {
16 + return Message(new SourceLineNumber(extensionId), Ids.MissingExtensionPackageRootFolder, "Could not find expected package root folder {0}. Ensure {1}/{2} is compatible with WiX v{3}.", packageRootFolderName, extensionId, packageVersion, wixVersion);
17 + }
18 +
19 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
20 {
21 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
@@ -19,6 +24,7 @@ namespace WixToolset.Core.ExtensionCache
24 public enum Ids
25 {
26 NugetException = 6100,
27 + MissingExtensionPackageRootFolder = 6101,
28 } // last available is 6499. 6500 is ExtensionCacheErrors.
29 }
30 }
src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
+2 -2
@@ -15,8 +15,8 @@ namespace WixToolset.Core.ExtensibilityServices
15
16 internal class ExtensionManager : IExtensionManager
17 {
18 - // This value needs to stay in sync with the Property in "wix.targets" with the same name.
19 - private const string WixToolsetExtensionPackageFolder = "wixext4";
18 + // This value needs to stay in sync with the Property in "wix.props" with the same name.
19 + private const string WixToolsetExtensionPackageFolder = "wixext5";
20
21 private const string UserWixFolderName = ".wix";
22 private const string MachineWixFolderName = "WixToolset";
src/wix/WixToolset.Sdk/tools/wix.props
+1 -1
@@ -9,7 +9,7 @@
9 <WixToolsetPatchVersion>$$WixToolsetPatchVersion$$</WixToolsetPatchVersion>
10 <WixToolsetMajorMinorVersion>$$WixToolsetMajorMinorVersion$$</WixToolsetMajorMinorVersion>
11 <WixToolsetVersion>$$WixToolsetVersion$$</WixToolsetVersion>
12 - <WixToolsetExtensionPackageFolder>wixext4</WixToolsetExtensionPackageFolder>
12 + <WixToolsetExtensionPackageFolder>wixext5</WixToolsetExtensionPackageFolder>
13 </PropertyGroup>
14
15 <ImportGroup>
src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
+36 -3
@@ -12,6 +12,8 @@ namespace WixToolsetTest.CoreIntegration
12 using WixToolset.Data;
13 using WixToolset.Data.Symbols;
14 using Xunit;
15 + using System.Diagnostics;
16 + using System.Reflection;
17
18 public class ExtensionFixture
19 {
@@ -290,7 +292,7 @@ namespace WixToolsetTest.CoreIntegration
292 }
293 }
294
293 - [Fact]
295 + [Fact(Skip = "Depends on a v5 extension being available, which isn't true for nuget.org yet or this early in the build.")]
296 public void CanManipulateExtensionCache()
297 {
298 var currentFolder = Environment.CurrentDirectory;
@@ -304,7 +306,7 @@ namespace WixToolsetTest.CoreIntegration
306
307 var result = WixRunner.Execute(new[]
308 {
307 - "extension", "add", "WixToolset.UI.wixext"
309 + "extension", "add", "WixToolset.UI.wixext",
310 });
311
312 result.AssertSuccess();
@@ -318,8 +320,12 @@ namespace WixToolsetTest.CoreIntegration
320 });
321
322 result.AssertSuccess();
323 +
324 var output = result.Messages.Select(m => m.ToString()).Single();
322 - Assert.StartsWith("WixToolset.UI.wixext 4.", output);
325 + var executingAssembly = Assembly.GetExecutingAssembly();
326 + var fileVersion = FileVersionInfo.GetVersionInfo(executingAssembly.Location);
327 +
328 + Assert.StartsWith($"WixToolset.UI.wixext {fileVersion.FileMajorPart}", output);
329 Assert.DoesNotContain("damaged", output);
330
331 result = WixRunner.Execute(new[]
@@ -337,6 +343,33 @@ namespace WixToolsetTest.CoreIntegration
343 }
344 }
345
346 + [Fact]
347 + public void TryingToAddAV4ExtensionFails()
348 + {
349 + var currentFolder = Environment.CurrentDirectory;
350 +
351 + try
352 + {
353 + using (var fs = new DisposableFileSystem())
354 + {
355 + var folder = fs.GetFolder(true);
356 + Environment.CurrentDirectory = folder;
357 +
358 + var result = WixRunner.Execute(new[]
359 + {
360 + "extension", "add", "WixToolset.UI.wixext/4.0.4",
361 + });
362 +
363 + Assert.Equal(2, result.ExitCode);
364 + Assert.Equal(6101, result.Messages.Single().Id);
365 + }
366 + }
367 + finally
368 + {
369 + Environment.CurrentDirectory = currentFolder;
370 + }
371 + }
372 +
373 private static void Build(string[] args)
374 {
375 var result = WixRunner.Execute(args);