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

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

Ответ 2

На самом деле это довольно просто сделать, и, верьте или нет, похоже, так работает 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>

Поместите следующие строки дословно в событие post-build в свойствах проекта проекта, который содержит файл web.config. Сделайте это для каждой конфигурации сборки, для которой нужно выполнить преобразования.

"$(MSBUILDBINPATH)\msbuild" "$(ProjectPath)" /t:Transform /p:Configuration=$(ConfigurationName);Platform=AnyCPU
xcopy "$(ProjectDir)obj\$(ConfigurationName)\Web.Config" "$(ProjectDir)". /F /R /Y

Ответ 3

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

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

Ответ 4

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

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

Ответ 5

После прочтения многих похожих сообщений и проблем с невозможностью перезаписывания файлов или отсутствия доступа к 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 не хочет отпускать Source web.config, я использую временный файл (благодаря этой статье для информации: http://www.diaryofaninja.com/blog/2011/09/14/using-custom-webconfig-transformations-in-msbuild)

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

Ответ 6

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

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

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

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

Ответ 7

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