2010-08-06 1 views
6

근무중인 팀에서 우리는 많은 WCF 웹 서비스가있는 큰 제품과 서비스를 사용하는 일부 웹 사이트를 보유하고 있습니다. 우리는 VS 2010으로 업그레이드하려고하고 있습니다. VS 2010에서 새로운 구성 변환 기능을 사용해야하는지 생각하고 있습니다.로컬에서 실행/디버깅 할 때 Visual Studio 2010 config transform을 사용하는 방법은 무엇입니까?

우리는 서로 다른 web.configs (데이터베이스 연결 문자열, WCF 주소 등). 종종 웹 프론트 엔드와 같은 어떤 것을 디버깅 할 때 TEST 또는 QA 백엔드/데이터베이스에 직접 연결되도록 구성하는 것이 유용합니다. 각 개발자의 로컬 컴퓨터에서 IIS는 각 WCF/웹 프로젝트의 원본 폴더에 직접 구성되며 로컬에서 실행될 때는 Ctrl-Shift-B 또는 F5를 사용하여 디버깅 할 수 있습니다. 구성 모드로/F5를 빌드하거나 테스트 모드 또는 QA를 사용하여 TEST/QA 구성을 가져 오는 것이 가능할 것이라고 생각하지만 어떻게 표시되지는 않습니다. 지원되지 않습니까, 아니면 우리가 일하는 방식을 바꿀 필요가 있을까요?

우리의 다른 옵션은 구성 모드에 따라 템플릿과 키 파일에서 web.config를 생성하는 prebuild 이벤트로 대신 replace-script를 사용하는 것입니다. 이 방법을 사용하면 TEST 등에서 컴파일하는 경우 TEST 구성을 얻게되지만 Visual Studio에 내장 된 함수가있을 때 우리 자신의 솔루션을 롤백하는 것이 다소 안 좋을 것입니다.

답변

1

.csproj 파일에서 사용할 수있는 BeforeBuild 및 AfterBuild 대상을 사용하면 원하는 효과를 얻을 수 있습니다. VS.NET IDE는 Build 또는 Rebuild를 수행 할 때 이러한 대상을 실행하므로이를 사용하여 web.config 변환을 실행할 수 있습니다. web.config 변환을 수행 한 다음 실제 web.config 파일을 덮어 쓰려면 web.default.config라는 새 파일을 사용하여 기본 web.config 데이터를 저장해야합니다. (나는 ++ 메모장을 사용)

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
<ProjectExtensions> 
... 
</ProjectExtensions> 
<Target Name="BeforeBuild"> 
    <Copy SourceFiles="$(ProjectDir)web.default.config" DestinationFiles="$(ProjectDir)web.config" /> 
</Target> 
<Target Name="AfterBuild" Condition="$(FirstRun) != 'false'"> 
    <MSBuild Projects="$(MSBuildProjectFile)" Targets="TransformWebConfig" Properties="FirstRun=false;" /> 
    <Sleep Milliseconds="2000" /> 
    <Copy SourceFiles="$(ProjectDir)obj\$(ConfigurationName)\TransformWebConfig\transformed\web.config" 
     DestinationFiles="$(ProjectDir)web.config" /> 
</Target> 

내가 수동으로 .csproj 파일에 다음을 추가했다 :

은 여기, 테스트 프로젝트에서이 밖으로 시도 나는 .csproj 파일의 변경 사항을이었다. 지금까지 내가 VS.NET IDE를 통해 이러한 지침을 추가 할 방법이 없다는 것을 알 수 있습니다. MSBuild에 대한 호출이 web.config 변환을 생성하기 위해 빌드를 다시 실행하므로 순환 참조가 없도록하기 위해 AfterBuild에 조건부를 제공해야합니다.

기본적으로 빌드를 시작하기 전에 web.default.config 파일 (기본 템플릿)을 기존 web.config에 복사 한 다음 MSBuild를 사용하여 모든 구성에 대해 web.config를 생성합니다 우리가 만들고있어. 변환이 완료되면 복사 작업을 사용하여 변환 된 파일을 가져 와서 웹 루트의 web.config 파일에 복사합니다. 가끔씩 만난 한 가지 문제는 변환이 완료된 후 web.config를 덮어 쓰려고 할 때 사용중인 파일 오류였습니다. MSBuild 작업이이 문제를 해결 한 후 수면 작업 (MSBuildCommunityTasks)을 추가했습니다.

나는 IIS가 아니라 내장 된 ASP.NET 서버를 사용하여이 접근법을 테스트 했으므로 YMMV가 좋지만 실행 가능한 솔루션이라고 생각합니다.

FirstRun 아이디어는 post에서 나왔습니다.

+0

Ive는이 답변을 받아 들일만한 것으로 표시했습니다 (테스트하지는 않았더라도). 감사. 결국 마지막 단락에서 작성한 것처럼 사용자 정의 postbuild 이벤트로갔습니다. 교체하는 방법을 결정하기 위해 configurationName을 사용하는 템플리트에서 web.config를 작성하는 작은 powershell 스크립트. – viblo

+0

@viblo 감사합니다. 나는 그것이 일종의 hackish이기 때문에 내가 약술 한 접근법을 사용할 것인지 확신하지 못한다. 그러나 나는 그것에 대해 더 궁금해했다. 어느 쪽이든, 좋은 질문입니다. – rsbarro

+0

@rsbarro 먼저 깨끗한 답변에 감사드립니다. 그러나 Im은 여전히 ​​"file in use error"라는 동일한 문제를 가지고 있습니다.심지어 을 추가했습니다. 다른 제안이 있으십니까? 감사합니다 – curiousBoy