.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에서 나왔습니다.
Ive는이 답변을 받아 들일만한 것으로 표시했습니다 (테스트하지는 않았더라도). 감사. 결국 마지막 단락에서 작성한 것처럼 사용자 정의 postbuild 이벤트로갔습니다. 교체하는 방법을 결정하기 위해 configurationName을 사용하는 템플리트에서 web.config를 작성하는 작은 powershell 스크립트. – viblo
@viblo 감사합니다. 나는 그것이 일종의 hackish이기 때문에 내가 약술 한 접근법을 사용할 것인지 확신하지 못한다. 그러나 나는 그것에 대해 더 궁금해했다. 어느 쪽이든, 좋은 질문입니다. – rsbarro
@rsbarro 먼저 깨끗한 답변에 감사드립니다. 그러나 Im은 여전히 "file in use error"라는 동일한 문제를 가지고 있습니다.심지어 을 추가했습니다. 다른 제안이 있으십니까? 감사합니다 –
curiousBoy