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.
Diffstat (limited to '')
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); |
