Web.debug.configVisual Studio 2010 기본 제공 디버거에서 어떻게 병합하고 사용할 수 있습니까?
답변:
이것은 알려진 버그입니다. 이 기능은 지금 배포 프로세스의 일부로 만 사용할 수 있습니다.
이것도 만난다면 그것을 찬성하십시오, 그래서 이것은 최대한 빨리 해결 될 것입니다.
이것은 실제로 매우 간단하며 믿거 나 말거나 이것이 VS가 작동하도록 설계된 방식 인 것 같습니다.
web.config가 포함 된 프로젝트의 .csproj 파일에서 닫는 "Project"태그 바로 앞에 다음 줄을 그대로 추가합니다.
<UsingTask TaskName="TransformXml" AssemblyFile="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\Web\Microsoft.Web.Publishing.Tasks.dll" />
<Target Name="Transform">
<MakeDir Directories="obj\$(Configuration)" Condition="!Exists('obj\$(Configuration)')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="obj\$(Configuration)\Web.config" StackTrace="true" />
</Target>
web.config 파일이 포함 된 프로젝트의 프로젝트 속성에서 빌드 후 이벤트에 다음 줄을 그대로 입력합니다. 변환을 실행할 각 빌드 구성에 대해이 작업을 수행하십시오.
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y
Web.config하므로 모든 변환이 "멱 등성"이어야합니다 ( 다른 변환 의 결과 에 다시 적용 할 수 있음 ). 또한 파일을 소스 제어에 넣는 경우 (아마도 그래야 할) 상태를 유지하지 못하게합니다. 전반적으로 복잡성 / 고통을 다음 문제 세트로 이동시키는 "간단한"해킹입니다. 거기에서 "더 잘"해결할 수 있다면 좋을 것이고 그렇지 않으면 나쁘다. 또한 VS 버전을 하드 코딩 대신 $ (VisualStudioVersion를) 사용을 고려 (당신은 것이다 변경하는 것을 잊지).
태그 바로 앞의 .csproj 파일 끝에 이것을 추가하여 더 간단한 방법으로이 문제를 해결했습니다. 이것은 빌드 후 이벤트를 사용하지 않는다는 차이점을 제외하고 keitn의 답변과 유사합니다.
<Target Name="BeforeBuild">
<TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>
내 프로젝트의 web.config를 bin 폴더에서 끝나는 것만 업데이트하고 싶지 않았으므로 여기에 내가 한 방법입니다.
.csproj 끝에 다음을 추가합니다 (최종 종료 프로젝트 태그 바로 앞).
<Target Name="Transform">
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>
그런 다음 다음 빌드 후 단계를 추가하십시오.
"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
즉, 빌드 할 때 디버그 / 릴리스 구성에서 출력 bin 디렉토리의 WebsiteName.Config 파일로 변환이 발생하므로 프로젝트의 기본 web.config를 방해하지 않습니다.
많은 유사한 게시물을 읽고 파일을 덮어 쓸 수 없거나 읽기 전용이기 때문에 web.config에 액세스 할 수없는 문제가 발생한 후 이것이 저를 위해 일한 것입니다.
<Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
<ItemGroup>
<OriginalWebConfig Include="$(ProjectDir)Web.config"/>
<TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
</ItemGroup>
<Exec Command=""$(DevEnvDir)tf.exe" checkout "$(ProjectDir)Web.config"" />
<Copy SourceFiles="@(OriginalWebConfig)" DestinationFiles="@(TempWebConfig)" />
<TransformXml Source="$(ProjectDir)TempWeb.config"
Transform="Web.$(Configuration).config"
Destination="Web.config" />
</Target>
메모:
이것은 BeforeBuild 대상으로 실행됩니다.
특정 구성 (대체 디버그 환경)에서만 실행되기를 원하기 때문에 Condition이 있습니다. 웹 배포를 통해 배포 할 때 게시 대상이 시작되고이 대상을 실행할 필요가 없습니다.
web.config를 확인하는 것을 기억하고 싶지 않기 때문에 (완료되었을 때만 실행 취소하기 위해) 변환을 시작하기 전에 web.config를 확인합니다. TFS를 사용하지 않는 경우이 줄을 제거 할 수 있습니다.
VS (2010) \ msbuild는 소스 web.config를 버리고 싶지 않기 때문에 임시 파일을 사용합니다 (이 기사에 대한 정보 : http://www.diaryofaninja.com/blog/2011/09/ 14 / msbuild에서 사용자 지정 웹 구성 변환 사용 )
TempWeb.config를 삭제하는 명령을 추가하려고했지만 VS \ msbuild는 그것을 놓치고 싶지 않습니다. TFS에 추가되지 않기 때문에 함께 살 수 있습니다.
The command ""C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\tf.exe" checkout "C:\_Code\RTS\SCTimeSheet\Web.config"" exited with code 9009있습니다. 어떤 아이디어?
나는 이것이 오래되었다는 것을 알고 있지만 동일한 문제에 직면하고 있습니다. 기본 Web.config에서 끝점, 연결 문자열 등을 대체하는 테스트, 준비, 라이브 구성이 있습니다.
그러나 다음을 수행합니다.
그다지 많은 단계가 아니며 익숙해지면 꽤 빨리 완료됩니다. 도움이 되었기를 바랍니다. :)
@ologesa : 솔루션에는 원본 Web.config에 대한 쓰기 액세스 권한이 필요합니다 (TFS에서 체크 아웃해야 함). 더 나은 해결책은 keitn이하는 것처럼 bin 폴더에 Web.config를 직접 생성하는 것입니다. keitn과 귀하의 솔루션을 결합하면 다음과 같은 결과를 얻을 수 있습니다.
<Target Name="BeforeBuild">
<Message Text="Transforming Web.config from Web.$(Configuration).config" Importance="high" />
<MakeDir Directories="bin" Condition="!Exists('bin')" />
<TransformXml Source="Web.Config" Transform="Web.$(Configuration).config" Destination="bin\$(TargetFileName).config" StackTrace="true" />
</Target>