@@ -36,14 +36,14 @@ function InstallCodeDomProvider($providerDescription) {
3636 # #### Add the default provider if it wasn't rehydrated above
3737 $defaultProvider = $config.xml.configuration [" system.codedom" ].compilers.compiler | where { $_.extension -eq $providerDescription.FileExtension }
3838 if ($defaultProvider -eq $null ) { AddDefaultDeclaration $config $providerDescription }
39- SaveConfigFile $config
39+ SaveConfigFile $config | Out-Null
4040}
4141
4242function UninstallCodeDomProvider ($providerType ) {
4343 # #### Dehydrate config declarations #####
4444 $config = ReadConfigFile
4545 DehydrateDeclarations $config $providerType | Out-Null
46- SaveConfigFile $config
46+ SaveConfigFile $config | Out-Null
4747}
4848
4949function GetConfigFileName () {
@@ -70,7 +70,6 @@ function ReadConfigFile() {
7070
7171function DehydrateDeclarations ($config , $typeName ) {
7272 $tempFile = GetTempFileName
73- $xml
7473 $count = 0
7574
7675 if ([io.file ]::Exists($tempFile )) {
@@ -79,16 +78,15 @@ function DehydrateDeclarations($config, $typeName) {
7978 } else {
8079 $xml = New-Object System.Xml.XmlDocument
8180 $xml.PreserveWhitespace = $true
82- $dd = $xml.CreateElement (" driedDeclarations" )
83- $xml.AppendChild ($dd ) | Out-Null
81+ $xml.AppendChild ($xml.CreateElement (" driedDeclarations" )) | Out-Null
8482 }
8583
8684 foreach ($rec in $config.xml.configuration [" system.codedom" ].compilers.compiler | where { IsSameType $_.type $typeName }) {
8785 # Remove records from config.
8886 $config.xml.configuration [" system.codedom" ].compilers.RemoveChild($rec ) | Out-Null
8987
9088 # Add the record to the temp stash. Don't worry about duplicates.
91- AppendChildNode $xml.ImportNode ($rec , $true ) $xml.DocumentElement
89+ AppendChildNode $xml.ImportNode ($rec , $true ) $xml.DocumentElement | Out-Null
9290 $count ++
9391 }
9492
@@ -116,8 +114,9 @@ function RehydrateOldDeclarations($config, $providerDescription) {
116114 if ($existingRecord -ne $null ) { continue }
117115
118116 # Bring the record back to life
119- AppendChildNode $config.xml.ImportNode ($rec , $true ) $config.xml.configuration [" system.codedom" ][" compilers" ]
117+ AppendChildNode $config.xml.ImportNode ($rec , $true ) $config.xml.configuration [" system.codedom" ][" compilers" ] | Out-Null
120118 $count ++
119+ Write-Host " Restored system.codedom compiler for extension '$ ( $rec.extension ) '."
121120 }
122121
123122 # Make dried record removal permanent
@@ -130,18 +129,15 @@ function UpdateDeclarations($config, $providerDescription) {
130129 $count = 0
131130
132131 foreach ($provider in $config.xml.configuration [" system.codedom" ].compilers.compiler | where { IsSameType $_.type ($providerDescription.TypeName + " ," + $providerDescription.Assembly ) }) {
133- # Count the existing declaration as found
134- $count ++
135132
136- # Update type
137- $provider.type = " $ ( $providerDescription.TypeName ) , $ ( $providerDescription.Assembly ) , Version=$ ( $providerDescription.Version ) , Culture=neutral, PublicKeyToken=31bf3856ad364e35"
133+ $failed = $false
138134
139135 # Add default attributes if they are required and not already present
140136 foreach ($p in $providerDescription.Parameters | where { ($_.IsRequired -eq $true ) -and ($_.IsProviderOption -eq $false ) }) {
141137 if ($provider .($p.Name ) -eq $null ) {
142138 if ($p.DefaultValue -eq $null ) {
143- Write-Host " Failed to add parameter to '$ ( $provider.name ) ' codeDom provider: '$ ( $p.Name ) ' is required, but does not have a default value."
144- return
139+ Write-Warning " Failed to add parameter to '$ ( $provider.name ) ' codeDom provider: '$ ( $p.Name ) ' is required, but does not have a default value."
140+ $failed = $true
145141 }
146142 $attr = $config.xml.CreateAttribute ($p.Name )
147143 $attr.Value = $p.DefaultValue
@@ -154,15 +150,21 @@ function UpdateDeclarations($config, $providerDescription) {
154150 $existing = $provider.providerOption | where { $_.name -eq $p.Name }
155151 if ($existing -eq $null ) {
156152 if ($p.DefaultValue -eq $null ) {
157- Write-Host " Failed to add providerOption to '$ ( $provider.name ) ' codeDom provider: '$ ( $p.Name ) ' is required, but does not have a default value."
158- return
153+ Write-Warning " Failed to add providerOption to '$ ( $provider.name ) ' codeDom provider: '$ ( $p.Name ) ' is required, but does not have a default value."
154+ $failed = $true
159155 }
160156 $po = $config.xml.CreateElement (" providerOption" )
161- $po.SetAttribute (" name" , $p.Name )
162- $po.SetAttribute (" value" , $p.DefaultValue )
163- AppendChildNode $po $provider 4
157+ $po.SetAttribute (" name" , $p.Name ) | Out-Null
158+ $po.SetAttribute (" value" , $p.DefaultValue ) | Out-Null
159+ AppendChildNode $po $provider 4 | Out-Null
164160 }
165161 }
162+
163+ # Finally, update type. And do so with remove/add so the 'type' parameter gets put at the end
164+ $provider.RemoveAttribute (" type" ) | Out-Null
165+ $provider.SetAttribute (" type" , " $ ( $providerDescription.TypeName ) , $ ( $providerDescription.Assembly ) , Version=$ ( $providerDescription.Version ) , Culture=neutral, PublicKeyToken=31bf3856ad364e35" ) | Out-Null
166+
167+ if ($failed -ne $true ) { $count ++ }
166168 }
167169
168170 return $count
@@ -172,7 +174,7 @@ function AddDefaultDeclaration($config, $providerDescription) {
172174 $dd = $config.xml.CreateElement (" compiler" )
173175
174176 # file extension first
175- $dd.SetAttribute (" extension" , $providerDescription.FileExtension )
177+ $dd.SetAttribute (" extension" , $providerDescription.FileExtension ) | Out-Null
176178
177179 # everything else in the middle
178180 foreach ($p in $providerDescription.Parameters ) {
@@ -184,19 +186,20 @@ function AddDefaultDeclaration($config, $providerDescription) {
184186 if ($p.DefaultValue -ne $null ) {
185187 if ($p.IsProviderOption -eq $true ) {
186188 $po = $config.xml.CreateElement (" providerOption" )
187- $po.SetAttribute (" name" , $p.Name )
188- $po.SetAttribute (" value" , $p.DefaultValue )
189- AppendChildNode $po $dd 4
189+ $po.SetAttribute (" name" , $p.Name ) | Out-Null
190+ $po.SetAttribute (" value" , $p.DefaultValue ) | Out-Null
191+ AppendChildNode $po $dd 4 | Out-Null
190192 } else {
191- $dd.SetAttribute ($p.Name , $p.DefaultValue )
193+ $dd.SetAttribute ($p.Name , $p.DefaultValue ) | Out-Null
192194 }
193195 }
194196 }
195197
196198 # type last
197- $dd.SetAttribute (" type" , " $ ( $providerDescription.TypeName ) , $ ( $providerDescription.Assembly ) , Version=$ ( $providerDescription.Version ) , Culture=neutral, PublicKeyToken=31bf3856ad364e35" )
199+ $dd.SetAttribute (" type" , " $ ( $providerDescription.TypeName ) , $ ( $providerDescription.Assembly ) , Version=$ ( $providerDescription.Version ) , Culture=neutral, PublicKeyToken=31bf3856ad364e35" ) | Out-Null
198200
199- AppendChildNode $dd $config.xml.configuration [" system.codedom" ][" compilers" ]
201+ AppendChildNode $dd $config.xml.configuration [" system.codedom" ][" compilers" ] | Out-Null
202+ Write-Host " Added system.codedom compiler for extension '$ ( $dd.extension ) '."
200203}
201204
202205function AppendChildNode ($provider , $parent , $indentLevel = 3 ) {
@@ -215,7 +218,7 @@ function AppendChildNode($provider, $parent, $indentLevel = 3) {
215218 }
216219
217220 # Add on a new line with indents. Make sure there is no existing whitespace mucking this up.
218- foreach ($exws in $parent.ChildNodes | where { $_ -is [System.Xml.XmlWhitespace ] }) { $parent.RemoveChild ($exws ) }
221+ foreach ($exws in $parent.ChildNodes | where { $_ -is [System.Xml.XmlWhitespace ] }) { $parent.RemoveChild ($exws ) | Out-Null }
219222 $parent.AppendChild ($parent.OwnerDocument.CreateWhitespace (" `r`n " )) | Out-Null
220223 $parent.AppendChild ($parent.OwnerDocument.CreateWhitespace (" " * $indentLevel )) | Out-Null
221224 $parent.AppendChild ($provider ) | Out-Null
@@ -224,7 +227,7 @@ function AppendChildNode($provider, $parent, $indentLevel = 3) {
224227}
225228
226229function SaveConfigFile ($config ) {
227- $config.xml.Save ($config.fileName )
230+ $config.xml.Save ($config.fileName ) | Out-Null
228231}
229232
230233function IsSameType ($typeString1 , $typeString2 ) {
0 commit comments