@@ -80,11 +80,24 @@ public InstallerStatus PostParameters(IEnumerable<Parameter> parameters)
80
80
81
81
internal static bool SaveParametersToXdt ( string xdtPath , IEnumerable < Parameter > newParameters )
82
82
{
83
- var modified = false ;
84
83
var result = false ;
85
84
86
85
var document = XmlHelper . OpenAsXmlDocument ( xdtPath ) ;
87
86
87
+ // Inset a Parameter element with Xdt remove so that updated values get saved (for upgrades), we don't want this for NuGet packages which is why it's here instead
88
+ var nsMgr = new XmlNamespaceManager ( document . NameTable ) ;
89
+ var strNamespace = "http://schemas.microsoft.com/XML-Document-Transform" ;
90
+ nsMgr . AddNamespace ( "xdt" , strNamespace ) ;
91
+
92
+ var providerElement = document . SelectSingleNode ( string . Format ( "//Provider[@type = '{0}']" , ProviderType ) ) ;
93
+ var parametersElement = providerElement . SelectSingleNode ( "./Parameters" ) ;
94
+ var parameterRemoveElement = document . CreateNode ( "element" , "Parameters" , null ) ;
95
+ var tranformAttr = document . CreateAttribute ( "Transform" , strNamespace ) ;
96
+ tranformAttr . Value = "Remove" ;
97
+
98
+ parameterRemoveElement . Attributes . Append ( tranformAttr ) ;
99
+ providerElement . InsertBefore ( parameterRemoveElement , parametersElement ) ;
100
+
88
101
var parameters = document . SelectNodes ( string . Format ( "//Provider[@type = '{0}']/Parameters/add" , ProviderType ) ) ;
89
102
90
103
if ( parameters == null )
@@ -96,34 +109,31 @@ internal static bool SaveParametersToXdt(string xdtPath, IEnumerable<Parameter>
96
109
{
97
110
var key = parameter . GetAttribute ( "key" ) ;
98
111
var value = parameter . GetAttribute ( "value" ) ;
99
- var newValue = newParameters . FirstOrDefault ( x => x . Key == key ) . Value ;
100
112
101
- if ( ! value . Equals ( newValue ) )
113
+ var newParameter = newParameters . FirstOrDefault ( x => x . Key == key ) ;
114
+ if ( newParameter != null )
102
115
{
103
- parameter . SetAttribute ( "value" , newValue ) ;
104
- modified = true ;
116
+ var newValue = newParameter . Value ;
117
+
118
+ if ( ! value . Equals ( newValue ) )
119
+ {
120
+ parameter . SetAttribute ( "value" , newValue ) ;
121
+ }
105
122
}
106
123
}
107
124
108
- if ( modified )
125
+ try
109
126
{
110
- try
111
- {
112
- document . Save ( xdtPath ) ;
113
- // No errors so the result is true
114
- result = true ;
115
- }
116
- catch ( Exception e )
117
- {
118
- // Log error message
119
- var message = "Error saving XDT Parameters: " + e . Message ;
120
- LogHelper . Error ( typeof ( InstallerController ) , message , e ) ;
121
- }
127
+ document . Save ( xdtPath ) ;
128
+
129
+ // No errors so the result is true
130
+ result = true ;
122
131
}
123
- else
132
+ catch ( Exception e )
124
133
{
125
- // nothing to modify
126
- result = true ;
134
+ // Log error message
135
+ var message = "Error saving XDT Parameters: " + e . Message ;
136
+ LogHelper . Error ( typeof ( InstallerController ) , message , e ) ;
127
137
}
128
138
129
139
return result ;
0 commit comments