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>
사용InsertIfMissing
appSetting이 존재하는지 확인하기 위해 변환합니다.
그런 다음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
'programing' 카테고리의 다른 글
도커 컨테이너에서 로컬 mongodb에 연결 (0) | 2023.05.21 |
---|---|
공식 R1C1의 기능은 무엇입니까? (0) | 2023.05.21 |
app.use와 app.get in express.js의 차이 (0) | 2023.05.21 |
Android용 Eclipse의 관리 오류:configChanges (0) | 2023.05.21 |
Swift에서 프로그래밍 방식으로 번들 식별자를 가져오시겠습니까? (0) | 2023.05.21 |