내장 된 Visual Studio 디버거 서버에서 Web.debug.config를 어떻게 사용할 수 있습니까?


답변:


92

이것은 알려진 버그입니다. 이 기능은 지금 배포 프로세스의 일부로 만 사용할 수 있습니다.

https://connect.microsoft.com/VisualStudio/feedback/details/523221/have-web-debug-config-apply-during-development

이것도 만난다면 그것을 찬성하십시오, 그래서 이것은 최대한 빨리 해결 될 것입니다.


16
기록상 이것은 버그가 아닙니다. 이 파일은 패키지 / 게시 용입니다. 그러나 그것은 누군가가 항목에 투표하는 것을 낙담해서는 안됩니다.
Sayed Ibrahim Hashimi

26
저에게는 버그입니다. 그렇지 않으면 로컬 서버에서 디버그 / 릴리스 변환의 목적은 무엇입니까? 때때로 디자인은 잘못이다, 그게 :) 정확한 의미하지 않는다
스크립트의 제왕

4
문제는 Github를 사용할 때 발생하며 동기화 할 때 web.config를 무시해야합니다. 그러나 그것은 백업을 갖는 목적을 무너 뜨립니다. 이것이 제가 Github를 사용하는 이유입니다. 이제 시나리오에 AppHarbor를 추가하고 두 가지 유형의 web.config 파일을 지원해야합니다. apikey가 Github에 게시되기를 원하기 때문에 동기화 및 게시 전에 구성의 값을 대체해야합니다. 문제입니다. 구성에서 값을 대체하고 실수로 동기화하는 것을 잊고 무엇을 추측합니까? 귀하의 apikey가 방금 공개 저장소로 만들어졌습니다. Yikes, 무슨 문제.
David Robbins

8
MS Connect에 대한 링크가 끊어졌습니다
Michael Freidgeim

17
@LordofScripts : "설계대로"버그가 닫히면 가끔 "당신의 디자인에 버그가 있습니다!"라고 말하고 싶습니다.
Roy Tinker 2014 년

34

이것은 실제로 매우 간단하며 믿거 나 말거나 이것이 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

1
프로젝트 경로에 공백이 포함 된 경우 오류를 방지하기 위해 $ (ProjectDir) 및 $ (ProjectPath) 주위에 큰 따옴표를 추가하는 것이 좋습니다.
Alexander Prokofyev 2013

1
그것은 사용 <대상 이름 = "BeforeBuild">에 좋습니다, 그것은에서 제안 된대로 stackoverflow.com/a/10506476/52277
마이클 Freidgeim을

이 접근 방식을 사용하여 변환 작업을 수행 할 수 있지만 중단 점에 도달 할 수 없습니다. 디버그를 true로 설정했지만 중단 점에 도달 한 적이 없으며 "중단 점이 현재 적중되지 않습니다.이 문서에 대한 기호가로드되지 않았습니다."라는 메시지가 나타납니다. 이것은 내 사용자 지정 구성에서만 발생하며 내 구성을 "디버그"로 설정하면 제대로 작동합니다. 어떤 아이디어?
mithun_daa

1
작동하도록 $ (MSBUILDBINPATH) 주위에 큰 따옴표를 추가해야했습니다. 그렇지 않으면 코드 9009로 종료됩니다
sotn

6
이는 원본을 대체 Web.config하므로 모든 변환이 "멱 등성"이어야합니다 ( 다른 변환 의 결과 에 다시 적용 할 수 있음 ). 또한 파일을 소스 제어에 넣는 경우 (아마도 그래야 할) 상태를 유지하지 못하게합니다. 전반적으로 복잡성 / 고통을 다음 문제 세트로 이동시키는 "간단한"해킹입니다. 거기에서 "더 잘"해결할 수 있다면 좋을 것이고 그렇지 않으면 나쁘다. 또한 VS 버전을 하드 코딩 대신 $ (VisualStudioVersion를) 사용을 고려 (당신은 것이다 변경하는 것을 잊지).
tne

16

태그 바로 앞의 .csproj 파일 끝에 이것을 추가하여 더 간단한 방법으로이 문제를 해결했습니다. 이것은 빌드 후 이벤트를 사용하지 않는다는 차이점을 제외하고 keitn의 답변과 유사합니다.

<Target Name="BeforeBuild">
    <TransformXml Source="Web.config" Transform="Web.$(Configuration).config" Destination="Web.config" />
</Target>

3
확인, 작동합니다. 그러나 Web.config의 로컬 복사본을 수정하므로주의하십시오. 따라서 RemoveAttributes와 같은 XSLT 변환을 사용하는 경우 확실히 제거됩니다! SetAttributes
Loul G

이것은 내가 찾던 것과 정확히 일치했습니다. 간단하고 간단합니다. 다른 모든 솔루션이 왜 그렇게 복잡해야하는지 잘 모르겠습니다.
David Carrigan

누구든지 <Target name = "AfterBuild"> 섹션에서이 작업을 실행 취소하는 방법을 알고 있습니까?
Cameron Belt

1
이것이 답이되어야합니다.
Cameron Belt

2

내 프로젝트의 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를 방해하지 않습니다.


2
이것은 bin 디렉토리의 구성을 변환합니다. 불행히도이 구성은 사용되지 않습니다. 로드 된 구성은 실제로 bin 디렉토리에있는 것이 아니라 프로젝트 폴더에있는 Web.Config입니다.
Mick

2

많은 유사한 게시물을 읽고 파일을 덮어 쓸 수 없거나 읽기 전용이기 때문에 web.config에 액세스 할 수없는 문제가 발생한 후 이것이 저를 위해 일한 것입니다.

  <Target Name="BeforeBuild" Condition="$(Configuration) == 'MyAltDebugConfiguration'">
    <ItemGroup>
      <OriginalWebConfig Include="$(ProjectDir)Web.config"/>
      <TempWebConfig Include="$(ProjectDir)TempWeb.config"/>
    </ItemGroup>
    <Exec Command="&quot;$(DevEnvDir)tf.exe&quot; checkout &quot;$(ProjectDir)Web.config&quot;" />
    <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있습니다. 어떤 아이디어?
sky91

1

나는 이것이 오래되었다는 것을 알고 있지만 동일한 문제에 직면하고 있습니다. 기본 Web.config에서 끝점, 연결 문자열 등을 대체하는 테스트, 준비, 라이브 구성이 있습니다.

그러나 다음을 수행합니다.

  • 원하는 변환 구성 (예 : Web.Live.config )을 마우스 오른쪽 버튼으로 클릭합니다.
  • "Preview Transform"을 클릭합니다.
  • 모든 것을 오른쪽에서 복사합니다 (변환과 함께 Web.config가 표시되는 방식).
    • CTRL + A + CTRL + C
  • Web.config 파일 열기 (기본값)
  • 모두 선택 (CTRL + A)하여 붙여 넣기 (CTRL + V)
  • 운영

그다지 많은 단계가 아니며 익숙해지면 꽤 빨리 완료됩니다. 도움이 되었기를 바랍니다. :)


내가 올바르게 이해했다면 이것은 원래 web.config 파일에 대한 파괴적인 변경입니다. 질문의 맥락에서 이러한 단계는 디버그 세션이 시작될 때마다 수행되어야합니다.
Red Taz

-1

@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>

3
좋겠지 만 Mick이 말했듯이; 이 파일은 사용되지 않습니다. 이 구성 파일을 사용하는 응용 프로그램 또는 IIS를 얻으려면 어떻게해야합니까?
HMR
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.