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);