programing

web.config 변환을 사용하여 "Replace Or Insert"를 수행할 수 있는 방법이 있습니까?

closeapi 2023. 5. 21. 11:29
반응형

web.config 변환을 사용하여 "Replace Or Insert"를 수행할 수 있는 방법이 있습니까?

저는 다양한 환경에 대한 구성을 생성하기 위해 아래 게시물에 설명된 web.config 변환을 사용하고 있습니다.

http://vishaljoshi.blogspot.com/2009/03/web-deployment-webconfig-transformation_23.html

키를 일치시켜 "바꾸기" 변환을 수행할 수 있습니다. 예가 있습니다.

<add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />

예를 들어 "삽입"을 할 수 있습니다.

<add key="UseLivePaymentService" value="true" xdt:Transform="Insert" />

하지만 제가 정말 유용하다고 생각하는 것은 ReplaceOr.원래 구성 파일에 특정 키가 있거나 없는 것을 항상 의존할 수는 없으므로 변환을 삽입합니다.

이것을 할 수 있는 방법이 있습니까?

와 연계하여xdt:Transform="Remove"사용하다xdt:Transform="InsertIfMissing"VS2012에서.

<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertIfMissing">
  <deny users="?"/>
  <allow users="*"/>
</authorization>

저는 저렴한 해결책을 찾았습니다."바꾸기 또는 삽입"해야 하는 요소가 많은 경우에는 예쁘지 않고 잘 작동하지 않습니다.

"제거"를 수행한 다음 "다음 시간에 삽입"을 수행합니다.앞에 삽입".

예를들면,

<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertAfter(/configuration/system.web/authentication)">
  <deny users="?"/>
  <allow users="*"/>
</authorization>

사용InsertIfMissingappSetting이 존재하는지 확인하기 위해 변환합니다.
그런 다음Replace값을 설정하는 변환입니다.

<appSettings>
  <add key="Environment" xdt:Transform="InsertIfMissing" xdt:Locator="Match(key)" />
  <add key="Environment" value="Live" xdt:Transform="Replace" xdt:Locator="Match(key)" />
</appSettings>

당신은 또한 사용할 수 있습니다.SetAttributes대신 변환Replace다른 점은SetAttributes하위 노드를 건드리지 않습니다.

<appSettings>  
  <add key="UseLivePaymentService" xdt:Transform="InsertIfMissing" xdt:Locator="Match(key)" />
  <add key="UseLivePaymentService" value="true" xdt:Transform="SetAttributes" xdt:Locator="Match(key)" />
</appSettings>

기존 노드가 상위 노드의 맨 아래로 이동되지 않으므로 이러한 기술은 remove+insert보다 훨씬 좋습니다.새 노드는 끝에 추가됩니다.기존 노드는 원본 파일의 위치에 그대로 유지됩니다.

이 답변은 Visual Studio(2012년 이상)의 최신 버전에만 적용됩니다.

나에게 더 좋은 방법은 특정 속성만 설정하기 때문에 요소가 없는 경우에만 요소를 삽입하는 것이었습니다.요소를 제거하면 주 요소의 다른 속성이 있는 경우 해당 속성이 삭제됩니다.

예: web.config(요소 없음)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

web.config(요소 포함)

<serviceBehaviors>
    <behavior name="Wcf.ServiceImplementation.AllDigitalService_Behavior">
        <serviceDebug httpsHelpPageEnabled="true" />
        <serviceMetadata httpGetEnabled="true" />
    </behavior>
</serviceBehaviors>

XPath 식과 함께 Locator를 사용하여 노드가 없으면 노드를 추가한 다음 속성을 설정합니다.

<serviceDebug xdt:Transform="Insert"
  xdt:Locator="XPath(/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior[not(serviceDebug)])" />
<serviceDebug includeExceptionDetailInFaults="true" xdt:Transform="SetAttributes" />

결과 web.config 파일 모두 다음을 포함합니다.ExceptionDetailInFaults="true" 및 두 번째는 https를 유지합니다.제거/삽입 메서드가 없는 HelpPageEnabled 특성입니다.

언급URL : https://stackoverflow.com/questions/5732681/is-there-any-way-to-do-a-replace-or-insert-using-web-config-transformation

반응형