Как я могу использовать Web.debug.config на встроенном сервере отладчика visual studio?

Как я могу объединить и использовать Web.debug.config в visual studio 2010 встроен отладчик?

7 ответов

Это известная ошибка. Эта функция может использоваться прямо сейчас только как часть процесса развертывания.

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

Пожалуйста, подтвердите это, если вы столкнулись с этим, так что это будет исправлено как можно скорее.

Это на самом деле довольно просто сделать, и, хотите верьте, хотите нет, кажется, именно так VS работает.

Добавьте следующие строки дословно прямо перед закрывающим тегом "Project" файла.csproj проекта, который содержит web.config.

<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

Я решил эту проблему проще, добавив это в конец файла.csproj, прямо перед тегом. Это похоже на ответ Кейтна, с той разницей, что он не использует событие после сборки.

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

После прочтения многих похожих постов и проблем с файлами, которые невозможно перезаписать, или с недоступностью 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.

Я хочу, чтобы он работал только в определенной конфигурации (альтернативной среде отладки), поэтому у меня есть Условие. При развертывании через Интернет развертывается цель публикации, и мне не нужна эта цель для запуска.

Я не хочу не забывать проверять web.config (только чтобы отменить его, когда я закончу), поэтому я проверяю web.config перед началом преобразования. Если вы не используете TFS, вы можете удалить эту строку.

Поскольку VS (2010) \ msbuild не хочет выпускать исходный файл web.config, я использую временный файл (спасибо этой статье за ​​информацию: http://www.diaryofaninja.com/blog/2011/09/14/using-custom-webconfig-transformations-in-msbuild)

Я попытался добавить команду для удаления TempWeb.config, но VS \ msbuild не хочет ее отпускать. Я могу жить с этим, поскольку он не добавляется в TFS.

Я не хотел обновлять файл 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

Это означает, что при построении преобразование происходит из конфигурации отладки / выпуска в файл WebsiteName.Config в каталоге выходного бина, что не мешает основному web.config в проекте.

Я знаю, что это старый, но я сталкиваюсь с той же проблемой. У нас есть конфигурации Test, Staging, Live, которые заменяют конечные точки, строки подключения и т. Д. Из стандартного Web.config

Однако я бы сделал следующее:

  • Щелкните правой кнопкой мыши на нужной конфигурации преобразования (например, Web.Live.config).
  • Нажмите на "Превью предварительного просмотра"
  • Скопируйте все справа (именно так выглядит Web.config с преобразованием)
    • CTRL + A + CTRL + C
  • Откройте файл Web.config (по умолчанию)
  • Выберите все (CTRL+A) и вставьте его (CTRL+V)
  • Бежать

Это не так много шагов, и это делается довольно быстро, когда вы освоитесь. Надеюсь это поможет.:)

@ologesa: вашему решению необходим доступ с правами на запись к исходному файлу Web.config (вы должны оформить заказ в TFS). Лучшее решение - создать файл Web.config напрямую в папке bin, как это делает 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>
Другие вопросы по тегам