Как я могу объединить и использовать Web.debug.config
в встроенном отладчике Visual Studio 2010?
Как я могу использовать Web.debug.config на встроенном сервере отладки визуальной студии?
Ответ 1
Это известная ошибка. Эта функция может быть использована прямо сейчас только как часть процесса развертывания.
Продвиньте его, если вы столкнулись с этим, так что это будет исправлено как можно скорее.
Ответ 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=""$(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.
Я хочу, чтобы он запускался в определенной конфигурации (альтернативная среда отладки), и поэтому у меня есть условие. При развертывании через веб-развертывание цели публикации запускаются, и мне не нужна эта цель для запуска.
Я не хочу забывать, чтобы проверить 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>