Use a transformação web.config do Visual Studio para depurar

Duplicar Possível:
Como posso usar o Web.debug.config no servidor de depurador do Visual Studio embutido?

Eu quero usar a transformação Web.config que funciona bem para publicar também para debugging.

Quando publico um aplicativo da Web, o Visual Studio transforma automaticamente o Web.config com base em minha configuração de currenctbuild. Como posso dizer ao Visual Studio para fazer o mesmo quando eu iniciar a debugging? No debug start, ele simplesmente usa o Web.config padrão sem transformação.

Qualquer ideia?

OK, com o entendimento de que web.debug.config & web.release.config são apenas para pacotes / publicar. Eu criei uma maneira de ativar o que você está tentando fazer. Eu escrevi sobre isso em http://sedodream.com/2010/10/21/ASPNETWebProjectsWebdebugconfigWebreleaseconfig.aspx . Aqui está o resumo.

Agora vamos ver como podemos ativar o que o questionador quer fazer.

Para recapitular, quando ele constrói em uma configuração particular, ele quer que uma transformação específica seja aplicada ao web.config . Então obviamente você não quer manter um arquivo web.config , porque ele será sobrescrito.

Então, o que precisamos fazer é criar um novo arquivo web.template.config , que é apenas uma cópia do web.config . Em seguida, basta excluir o web.config usando o Windows Explorer (não exclua usando o Visual Studio porque não queremos excluí-lo do projeto).

Nota: Se você estiver usando um provedor de controle de origem que esteja integrado ao Visual Studio, provavelmente desejará excluir web.config do controle de origem.

Também com isso, não queremos usar web.debug.config ou web.release.config porque eles já têm uma function bem definida no pipeline de publicação na Web, portanto, não queremos perturbar isso. Então, vamos criar dois novos arquivos, na mesma pasta do projeto e web.template.config , web.dev.debug.config e web.dev.release.config .

A ideia é que essas serão as transformações aplicadas quando você depurar ou executar seu aplicativo no Visual Studio. Agora precisamos nos conectar ao processo build / package / publish para colocar tudo isso em ordem. Com o Web Application Projects (WAP), há um ponto de extensibilidade que você pode criar um arquivo de projeto na mesma pasta com o nome {ProjectName}.wpp.targets que {ProjectName} é o nome do projeto. Se este arquivo estiver no disco na mesma pasta que o WAP, ele será importado automaticamente para o arquivo do projeto. Então eu criei este arquivo. E eu coloquei o seguinte conteúdo:

         $(PrepareForRunDependsOn); UpdateWebConfigBeforeRun;                

Deixe-me explicar isso um pouco. Eu criei o destino CopyWebTemplateConfig que sempre copiará web.template.config para web.config na compilation, mesmo se você não estiver depurando seu aplicativo no Visual Studio.

Isso é necessário porque ainda precisamos oferecer suporte ao processo de pacote / publicação do Visual Studio. Em seguida, estendi a propriedade PrepareForRunDependsOn para include o destino UpdateWebConfigBeforeRun . Essa propriedade é usada para identificar a lista de destinos que precisam ser executados antes que qualquer projeto gerenciado seja executado no Visual Studio.

Neste destino, estou usando a tarefa TransformXml para transformar web.template.config , usando o web.dev.***.config correto. Depois disso, seu aplicativo é iniciado usando o web.config correto com base na sua configuração de compilation. Depois disso, tenho outro Target ExcludeCustomConfigTransformsFiles , que ExcludeCustomConfigTransformsFiles no processo package / publish através do atributo BeforeTargets=”ExcludeFilesFromPackage” . Isso é necessário porque não queremos que esses arquivos sejam incluídos quando o aplicativo é empacotado ou publicado. Então, isso é tudo que existe para isso.

Para explicar o processo de pacote / publicação um pouco mais para este cenário. Quando você empacota / publica web.debug.config ou web.release.config , dependendo da configuração de compilation, ainda será usado. Mas, em última análise, o arquivo que está sendo transformado é web.template.config , portanto, talvez seja necessário ajustar dependendo do que você tem nesse arquivo. Perguntas / Comentários?

Andrew está no caminho certo. Quando você está usando este recurso, aqui está como ele foi projetado para ser usado.

web.config Este é o arquivo de configuração que os desenvolvedores devem usar localmente. O ideal é que você consiga que isso seja padronizado. Por exemplo, você poderia usar localhost para cadeias de caracteres DB, e quais não. Você deve se esforçar para que isso funcione em máquinas dev sem mudanças.

web.debug.config Esta é a transformação que é aplicada quando você publica seu aplicativo no ambiente de preparação de desenvolvimento. Isso faria alterações no web.config, que são necessárias para o ambiente de destino.

web.release.config Esta é a transformação que é aplicada quando você publica seu aplicativo no ambiente de “produção”. Obviamente, você terá que ter cuidado com as senhas, dependendo do seu aplicativo / equipe.

O problema com a transformação do web.config que você está executando atualmente é que uma transformação pode executar ações destrutivas no web.config. Por exemplo, pode excluir atributos, excluir elementos etc.

Você poderia apenas usar o web.config ‘default’ como sua versão de desenvolvimento / debugging, e então o web.release.config continuaria a ser a versão de lançamento, já que suas transformações são aplicadas quando você publica.

Na sua configuração de debugging, adicione uma etapa de pós-compilation e use-a para replace / transformar seu web.config

Embora eu concorde que a abordagem mais simples geralmente é a melhor, posso facilmente imaginar uma circunstância em que, por algum período de tempo, você queira conectar seu IDE a um database de teste, em vez de seu database de desenvolvimento. Embora você possa especificar as strings de conexão de desenvolvimento em seu arquivo web.config padrão, seria muito bom ter um arquivo Web.Test.config para que, quando você trocar sua configuração de compilation para “Test”, você obtenha automaticamente as novas configurações enquanto ainda está no seu IDE.

A alternativa histórica é comentar um conjunto de sequências de conexão para outro, mas essas novas transformações de configuração mantêm a esperança de finalmente colocar uma participação no centro dessa prática feia. Embora um arquivo padrão para desenvolvimento e uma transformação para release possam funcionar a maior parte do tempo, adicionar uma etapa de pós-compilation para transformar o arquivo web.config é a resposta mais completa na minha opinião.