diff options
author | Bob Arnson <bob@firegiant.com> | 2024-02-17 18:38:50 -0500 |
---|---|---|
committer | Bob Arnson <github@bobs.org> | 2024-03-06 17:17:36 -0500 |
commit | bbc176de36987255f3e9ab10c002c22ffe8a9a7e (patch) | |
tree | 91d92f180ae49ae533bc49c779c32160423f7daf | |
parent | 7ec45e8318dc81392daa4eb3d8f95a1a88b60402 (diff) | |
download | wix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.tar.gz wix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.tar.bz2 wix-bbc176de36987255f3e9ab10c002c22ffe8a9a7e.zip |
WiX v5 uses `wixext5` NuGet package subdirectory.
Fixes wixtoolset/issues#7709.
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); |