@joebigelow / wix-1 / commits / 999621b1

Re-enable MSI usage of only a "." in Directory/@Name

Rob Mensching committed Apr 8, 2021 at 10:32 UTC 999621b156ae6be4c06205e3e992b2a76dce7926
3 files changed +68 -1
src/WixToolset.Core/Compiler.cs
+8 -1
@@ -4216,7 +4216,14 @@ namespace WixToolset.Core
4216 fileSourceAttribSet = true;
4217 break;
4218 case "Name":
4219 - name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true);
4219 + if ("." == attrib.Value)
4220 + {
4221 + name = attrib.Value;
4222 + }
4223 + else
4224 + {
4225 + name = this.Core.GetAttributeLongFilename(sourceLineNumbers, attrib, allowRelative: true);
4226 + }
4227 nameAttribute = attrib;
4228 break;
4229 case "ShortName":
src/test/WixToolsetTest.CoreIntegration/DirectoryFixture.cs
+47
@@ -88,6 +88,53 @@ namespace WixToolsetTest.CoreIntegration
88 }
89 }
90
91 + [Fact]
92 + public void CanGetDefaultName()
93 + {
94 + var folder = TestData.Get(@"TestData");
95 +
96 + using (var fs = new DisposableFileSystem())
97 + {
98 + var baseFolder = fs.GetFolder();
99 + var intermediateFolder = Path.Combine(baseFolder, "obj");
100 + var msiPath = Path.Combine(baseFolder, @"bin\test.msi");
101 +
102 + var result = WixRunner.Execute(new[]
103 + {
104 + "build",
105 + Path.Combine(folder, "Directory", "DefaultName.wxs"),
106 + Path.Combine(folder, "ProductWithComponentGroupRef", "Product.wxs"),
107 + "-bindpath", Path.Combine(folder, "SingleFile", "data"),
108 + "-intermediateFolder", intermediateFolder,
109 + "-o", msiPath
110 + });
111 +
112 + result.AssertSuccess();
113 +
114 + var intermediate = Intermediate.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
115 + var section = intermediate.Sections.Single();
116 +
117 + var dirSymbols = section.Symbols.OfType<WixToolset.Data.Symbols.DirectorySymbol>().ToList();
118 + WixAssert.CompareLineByLine(new[]
119 + {
120 + "BinFolder\tCompanyFolder\t.",
121 + "CompanyFolder\tProgramFilesFolder\tExample Corporation",
122 + "ProgramFilesFolder\tTARGETDIR\tPFiles",
123 + "TARGETDIR\t\tSourceDir"
124 + }, dirSymbols.OrderBy(d => d.Id.Id).Select(d => String.Join('\t', d.Id.Id, d.ParentDirectoryRef, d.Name)).ToArray());
125 +
126 + var data = WindowsInstallerData.Load(Path.Combine(baseFolder, @"bin\test.wixpdb"));
127 + var directoryRows = data.Tables["Directory"].Rows;
128 + WixAssert.CompareLineByLine(new[]
129 + {
130 + "BinFolder\tCompanyFolder\t.",
131 + "CompanyFolder\tProgramFilesFolder\tu7-b4gch|Example Corporation",
132 + "ProgramFilesFolder\tTARGETDIR\tPFiles",
133 + "TARGETDIR\t\tSourceDir"
134 + }, directoryRows.Select(r => String.Join('\t', r.FieldAsString(0), r.FieldAsString(1), r.FieldAsString(2))).ToArray());
135 + }
136 + }
137 +
138 [Fact]
139 public void CanGetDuplicateDir()
140 {
src/test/WixToolsetTest.CoreIntegration/TestData/Directory/DefaultName.wxs new
+13
@@ -0,0 +1,13 @@
1 +<?xml version="1.0" encoding="utf-8"?>
2 +<Wix xmlns="http://wixtoolset.org/schemas/v4/wxs">
3 + <Fragment>
4 + <ComponentGroup Id="ProductComponents" Directory="BinFolder" />
5 + </Fragment>
6 + <Fragment>
7 + <StandardDirectory Id="ProgramFilesFolder">
8 + <Directory Id="CompanyFolder" Name="!(bind.Property.Manufacturer)">
9 + <Directory Id="BinFolder" Name="." />
10 + </Directory>
11 + </StandardDirectory>
12 + </Fragment>
13 +</Wix>