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>