aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBob Arnson <bob@firegiant.com>2024-02-17 18:38:50 -0500
committerBob Arnson <github@bobs.org>2024-03-06 17:17:36 -0500
commitbbc176de36987255f3e9ab10c002c22ffe8a9a7e (patch)
tree91d92f180ae49ae533bc49c779c32160423f7daf
parent7ec45e8318dc81392daa4eb3d8f95a1a88b60402 (diff)
downloadwix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.tar.gz
wix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.tar.bz2
wix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.zip
WiX v5 uses `wixext5` NuGet package subdirectory.
Fixes wixtoolset/issues#7709.
-rw-r--r--src/ext/WixExt.props2
-rw-r--r--src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs14
-rw-r--r--src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs6
-rw-r--r--src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs4
-rw-r--r--src/wix/WixToolset.Sdk/tools/wix.props2
-rw-r--r--src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs39
6 files changed, 58 insertions, 9 deletions
diff --git a/src/ext/WixExt.props b/src/ext/WixExt.props
index fecfdd78..19a96254 100644
--- a/src/ext/WixExt.props
+++ b/src/ext/WixExt.props
@@ -10,7 +10,7 @@
10 10
11 <ItemGroup> 11 <ItemGroup>
12 <Content Include="$(MSBuildProjectName).targets" PackagePath="build" /> 12 <Content Include="$(MSBuildProjectName).targets" PackagePath="build" />
13 <Content Include="$(TargetPath)" PackagePath="wixext4" /> 13 <Content Include="$(TargetPath)" PackagePath="wixext5" />
14 14
15 <PackageReference Include="WixToolset.Extensibility" PrivateAssets="all" /> 15 <PackageReference Include="WixToolset.Extensibility" PrivateAssets="all" />
16 </ItemGroup> 16 </ItemGroup>
diff --git a/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs b/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs
index 7f5dc0ff..28aeae93 100644
--- a/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs
+++ b/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheManager.cs
@@ -29,12 +29,16 @@ namespace WixToolset.Core.ExtensionCache
29 { 29 {
30 this.Messaging = messaging; 30 this.Messaging = messaging;
31 this.ExtensionManager = extensionManager; 31 this.ExtensionManager = extensionManager;
32
33 this.WixVersion = typeof(ExtensionCacheManager).Assembly.GetName().Version.Major.ToString();
32 } 34 }
33 35
34 private IMessaging Messaging { get; } 36 private IMessaging Messaging { get; }
35 37
36 private IExtensionManager ExtensionManager { get; } 38 private IExtensionManager ExtensionManager { get; }
37 39
40 public string WixVersion { get; }
41
38 public async Task<bool> AddAsync(bool global, string extension, CancellationToken cancellationToken) 42 public async Task<bool> AddAsync(bool global, string extension, CancellationToken cancellationToken)
39 { 43 {
40 if (String.IsNullOrEmpty(extension)) 44 if (String.IsNullOrEmpty(extension))
@@ -212,11 +216,16 @@ namespace WixToolset.Core.ExtensionCache
212 { 216 {
213 stream.Position = 0; 217 stream.Position = 0;
214 218
215 Directory.CreateDirectory(extensionFolder);
216
217 using (var archive = new PackageArchiveReader(stream)) 219 using (var archive = new PackageArchiveReader(stream))
218 { 220 {
219 var files = archive.GetFiles(extensionPackageRootFolderName); 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);
220 await archive.CopyFilesAsync(extensionFolder, files, this.ExtractProgress, logger, cancellationToken); 229 await archive.CopyFilesAsync(extensionFolder, files, this.ExtractProgress, logger, cancellationToken);
221 } 230 }
222 231
@@ -266,6 +275,7 @@ namespace WixToolset.Core.ExtensionCache
266 var extensionFolder = Path.Combine(baseFolder, extensionId, extensionVersion, packageRootFolderName); 275 var extensionFolder = Path.Combine(baseFolder, extensionId, extensionVersion, packageRootFolderName);
267 if (!Directory.Exists(extensionFolder)) 276 if (!Directory.Exists(extensionFolder))
268 { 277 {
278 this.Messaging.Write(ExtensionCacheWarnings.MissingExtensionPackageRootFolder(extensionId, extensionVersion, packageRootFolderName, this.WixVersion));
269 return false; 279 return false;
270 } 280 }
271 281
diff --git a/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs b/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs
index ddcbfdea..28db205b 100644
--- a/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs
+++ b/src/wix/WixToolset.Core.ExtensionCache/ExtensionCacheWarnings.cs
@@ -11,6 +11,11 @@ namespace WixToolset.Core.ExtensionCache
11 return Message(new SourceLineNumber(extensionId), Ids.NugetException, "{0}", exceptionMessage); 11 return Message(new SourceLineNumber(extensionId), Ids.NugetException, "{0}", exceptionMessage);
12 } 12 }
13 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
14 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args) 19 private static Message Message(SourceLineNumber sourceLineNumber, Ids id, string format, params object[] args)
15 { 20 {
16 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args); 21 return new Message(sourceLineNumber, MessageLevel.Warning, (int)id, format, args);
@@ -19,6 +24,7 @@ namespace WixToolset.Core.ExtensionCache
19 public enum Ids 24 public enum Ids
20 { 25 {
21 NugetException = 6100, 26 NugetException = 6100,
27 MissingExtensionPackageRootFolder = 6101,
22 } // last available is 6499. 6500 is ExtensionCacheErrors. 28 } // last available is 6499. 6500 is ExtensionCacheErrors.
23 } 29 }
24} 30}
diff --git a/src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs b/src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
index 00ab5e6d..840b32d4 100644
--- a/src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
+++ b/src/wix/WixToolset.Core/ExtensibilityServices/ExtensionManager.cs
@@ -15,8 +15,8 @@ namespace WixToolset.Core.ExtensibilityServices
15 15
16 internal class ExtensionManager : IExtensionManager 16 internal class ExtensionManager : IExtensionManager
17 { 17 {
18 // This value needs to stay in sync with the Property in "wix.targets" with the same name. 18 // This value needs to stay in sync with the Property in "wix.props" with the same name.
19 private const string WixToolsetExtensionPackageFolder = "wixext4"; 19 private const string WixToolsetExtensionPackageFolder = "wixext5";
20 20
21 private const string UserWixFolderName = ".wix"; 21 private const string UserWixFolderName = ".wix";
22 private const string MachineWixFolderName = "WixToolset"; 22 private const string MachineWixFolderName = "WixToolset";
diff --git a/src/wix/WixToolset.Sdk/tools/wix.props b/src/wix/WixToolset.Sdk/tools/wix.props
index b867ca8a..284b93b0 100644
--- a/src/wix/WixToolset.Sdk/tools/wix.props
+++ b/src/wix/WixToolset.Sdk/tools/wix.props
@@ -9,7 +9,7 @@
9 <WixToolsetPatchVersion>$$WixToolsetPatchVersion$$</WixToolsetPatchVersion> 9 <WixToolsetPatchVersion>$$WixToolsetPatchVersion$$</WixToolsetPatchVersion>
10 <WixToolsetMajorMinorVersion>$$WixToolsetMajorMinorVersion$$</WixToolsetMajorMinorVersion> 10 <WixToolsetMajorMinorVersion>$$WixToolsetMajorMinorVersion$$</WixToolsetMajorMinorVersion>
11 <WixToolsetVersion>$$WixToolsetVersion$$</WixToolsetVersion> 11 <WixToolsetVersion>$$WixToolsetVersion$$</WixToolsetVersion>
12 <WixToolsetExtensionPackageFolder>wixext4</WixToolsetExtensionPackageFolder> 12 <WixToolsetExtensionPackageFolder>wixext5</WixToolsetExtensionPackageFolder>
13 </PropertyGroup> 13 </PropertyGroup>
14 14
15 <ImportGroup> 15 <ImportGroup>
diff --git a/src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs b/src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
index a59187b6..beb625b1 100644
--- a/src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
+++ b/src/wix/test/WixToolsetTest.CoreIntegration/ExtensionFixture.cs
@@ -12,6 +12,8 @@ namespace WixToolsetTest.CoreIntegration
12 using WixToolset.Data; 12 using WixToolset.Data;
13 using WixToolset.Data.Symbols; 13 using WixToolset.Data.Symbols;
14 using Xunit; 14 using Xunit;
15 using System.Diagnostics;
16 using System.Reflection;
15 17
16 public class ExtensionFixture 18 public class ExtensionFixture
17 { 19 {
@@ -290,7 +292,7 @@ namespace WixToolsetTest.CoreIntegration
290 } 292 }
291 } 293 }
292 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.")]
294 public void CanManipulateExtensionCache() 296 public void CanManipulateExtensionCache()
295 { 297 {
296 var currentFolder = Environment.CurrentDirectory; 298 var currentFolder = Environment.CurrentDirectory;
@@ -304,7 +306,7 @@ namespace WixToolsetTest.CoreIntegration
304 306
305 var result = WixRunner.Execute(new[] 307 var result = WixRunner.Execute(new[]
306 { 308 {
307 "extension", "add", "WixToolset.UI.wixext" 309 "extension", "add", "WixToolset.UI.wixext",
308 }); 310 });
309 311
310 result.AssertSuccess(); 312 result.AssertSuccess();
@@ -318,8 +320,12 @@ namespace WixToolsetTest.CoreIntegration
318 }); 320 });
319 321
320 result.AssertSuccess(); 322 result.AssertSuccess();
323
321 var output = result.Messages.Select(m => m.ToString()).Single(); 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);
323 Assert.DoesNotContain("damaged", output); 329 Assert.DoesNotContain("damaged", output);
324 330
325 result = WixRunner.Execute(new[] 331 result = WixRunner.Execute(new[]
@@ -337,6 +343,33 @@ namespace WixToolsetTest.CoreIntegration
337 } 343 }
338 } 344 }
339 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
340 private static void Build(string[] args) 373 private static void Build(string[] args)
341 { 374 {
342 var result = WixRunner.Execute(args); 375 var result = WixRunner.Execute(args);