2013-12-12 10 views
2

프로젝트에 app.config 변환을 적용하는 패키지가 있습니다. 이새로운 솔루션에 설치시 app.config 변환 문제

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="handlerId" value="$assemblyname$"/> <!--populate from project params--> 
    <--other params--> 
    </appSettings> 
</configuration> 

의 경우와 같이 변환 파일을 찾습니다 패키지를 업데이트 한 후 프로젝트의 app.config를 업데이트 수동으로, 아니의 app.config와 함께 새로운 프로젝트에 패키지를 추가합니다.

패키지에 app.config.transform을 포함하면 프로젝트에서 app.config가 생성되지만 매개 변수 중 하나의 값을 변경하고 패키지를 업데이트/다시 설치하면 건너 뛰지 않고 패키지의 값으로 해당 매개 변수의 복사본이 만들어집니다 그것.

예를 들어

:

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="handlerId" value="MyApp"/> 
    </appSettings> 
</configuration> 

깨끗한 프로젝트

에 따라 설치된 패키지는 다음 MyApp1 및 업데이트 패키지에 handlerId 값을 변경했습니다. 변환 결과는

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <add key="handlerId" value="MyApp1"/> 
    <add key="handlerId" value="MyApp"/> <!--shouldn't appear!--> 
    </appSettings> 
</configuration> 

xdt 변환을 대신 사용하려고했습니다. 그들은 app.config를 사용하여 프로젝트 패키지를 업데이트하거나 패키지를 설치할 때 훌륭하게 작동하지만 app.config가 없으면 만들지 않습니다.

답변

0

.transform 프로세스는 키 또는 값 속성을 구분하지 않습니다. 그들은 둘 다 단지 속성입니다. 따라서 특정 변경 사항이 중요하지 않으며 정의 된 요소를 다시 추가 할 필요가 없다는 것을 인식하지 못합니다.

http://docs.nuget.org/docs/creating-packages/configuration-file-and-source-code-transformations NuGet 프로젝트의 구성 파일로 변환 파일을 병합 할 때, 그것은 단지 요소를 추가하거나 구성 파일에서 기존 요소에 특성을 추가

; 다른 방법으로 기존 요소 또는 속성을 변경하지 않습니다. 해당 요소 + 속성 (들) 그대로가없는 경우 nuGet가 알고있는 모든 값 = "MyApp를"이 자사의 특정 패키지에 필요한 무엇인가를 정의 할 수 있습니다 들어

하고, 패키지는 기능하지 않을 것입니다.

+0

나는이 부분을 xdt의 trasformations 파일로 풀어 냈다. xdt로 app.config 파일을 만들 수 있다면 좋을 것입니다. 그래서이 방법들을 병합 할 방법이 필요합니다. – Redwan

0

같은 문제가 있습니다. 필자의 CI 서버가 프로젝트를 빌드 할 때 필자의 경우 중복 키가 추가되어 테스트가 실패하게됩니다.

나는 각 요소를 주석으로 처리하기 위해 작업했습니다. 그래서 내 app.config.transform 파일은 다음과 같습니다

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <appSettings> 
    <!--add key="handlerId" value="MyApp"/--> 
    </appSettings> 
</configuration> 

당신이 새로운 설정의 주석을 해제 할 수있는 사용자에게 달려 패키지를 설치합니다.

큰 해결책은 아니지만 작동합니다.