В проекте, над которым я работаю, есть несколько web.<env>.config
файлов.Я обнаружил, что переменные в элементе типа <aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" />
заменяются только в основном файле web.config, но их необходимо обновить во всех файлах .config.Мое решение этой проблемы состояло в том, чтобы написать сценарий PowerShell, который принимает значения %LAUNCHER_PATH%
и %LAUNCHER_ARGS%
после сборки проекта, и обновить другие файлы .config.
Сценарий, который я написал, работает как задумано, но когда я открываю обновленный файл в Visual Studios после того, как я обновил его, и приложение жалуется, что файл имеет несовместимые окончания строк, когда до запуска такого предупрежденияскрипт.Я подтвердил в Notepad ++, что есть определенные строки, которые содержат LF
, а не CR LF
, и они относятся к этому комментарию, который постоянно вставляется в мой файл.
<!--
Configure your application settings in appsettings.json. Learn more at http://go.microsoft.com/fwlink/?LinkId=786380
-->
Я обнаружил, что нетнезависимо от того, что я делаю, этот комментарий продолжает вставляться в мой файл;даже если я только загружаю и сразу сохраняю файл.
Скрипт
# Updates web.{env}.config files with the correct processPath and arguments
# that are populated in web.config during the publish process
$folder = "."
$nodeXpath = "configuration/system.webServer/aspNetCore"
if (Test-Path "$folder\web.config")
{
$originalNode = Select-Xml -Path "$folder\web.config" -XPath $nodeXpath | Select-Object -ExpandProperty Node
$processPath = Select-Xml -XPath "@processPath" -Xml $originalNode
$arguments = Select-Xml -XPath "@arguments" -Xml $originalNode
Get-ChildItem $folder -Filter web.*.config |
Foreach-Object {
# Using .NET XmlDocument
$xml = New-Object System.Xml.XmlDocument
$xml.PreserveWhitespace = $true
$xml.Load($_)
#$node = Select-Xml -Xml $xml -XPath $nodeXpath | Select-Object -ExpandProperty Node
#$node.SetAttribute("processPath", $processPath)
#$node.SetAttribute("arguments", $arguments)
$xml.Save((Resolve-Path $_))
}
}
XML, считываемый и сохраняемый в
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.webServer>
<handlers>
<add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified"/>
</handlers>
<aspNetCore processPath="%LAUNCHER_PATH%" arguments="%LAUNCHER_ARGS%" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false"/>
<security>
<authorization>
<remove users="*" roles="" verbs="" />
<add accessType="Allow" users="blah" />
<add accessType="Allow" roles="blahblah" />
<add accessType="Allow" roles="blahblahblah" />
</authorization>
<authentication>
<windowsAuthentication enabled="true" />
<anonymousAuthentication enabled="false" />
</authentication>
</security>
</system.webServer>
</configuration>
Комментарий будет вставлен прямо над <system.webServer>
.
Есть ли способ заставить действие сохранения не вставлять комментарий?Если это невозможно, есть ли способ исправить комментарий так, чтобы он не имел непоследовательных окончаний строк по сравнению с остальной частью файла?