다른 환경에 대한 구성을 생성하기 위해 아래 게시물에 설명 된대로 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" />
그러나 실제로 유용한 것은 ReplaceOrInsert 변환입니다. 왜냐하면 항상 특정 키가 있거나없는 원래 구성 파일에 의존 할 수는 없기 때문입니다.
이것을 할 수있는 방법이 있습니까?
답변
저렴한 해결 방법을 찾았습니다. “바꾸거나 삽입”해야하는 요소가 많으면 예쁘지 않고 잘 작동하지 않습니다.
“제거”와 “삽입 후 | 삽입 전”을 수행하십시오.
예를 들어
<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertAfter(/configuration/system.web/authentication)">
<deny users="?"/>
<allow users="*"/>
</authorization>
답변
VS2012에서의 xdt:Transform="Remove"
사용 과 함께 xdt:Transform="InsertIfMissing"
.
<authorization xdt:Transform="Remove" />
<authorization xdt:Transform="InsertIfMissing">
<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 표현식과 함께 로케이터를 사용하여 노드가 존재하지 않으면 노드를 추가 한 다음 속성을 설정하십시오.
<serviceDebug xdt:Transform="Insert"
xdt:Locator="XPath(/configuration/system.serviceModel/behaviors/serviceBehaviors/behavior[not(serviceDebug)])" />
<serviceDebug includeExceptionDetailInFaults="true" xdt:Transform="SetAttributes" />
결과 web.config 파일에는 모두 includeExceptionDetailInFaults = “true”가 있고 두 번째 파일에는 remove / insert 메소드가없는 httpsHelpPageEnabled 속성이 유지됩니다.