Pergunta

Toda vez que eu construo ou publico, um Visual Studio tenta conferir o web.config Arquivo para que ele possa adicionar vários conjuntos que não são necessários.

Em outras palavras:

web.config antes da:

<configuration>
   <system.web>
      <compilation>
         <assemblies>
         </assemblies>
      </compilation>
   </system.web>
</configuration>

web.config depois:

<configuration>
   <system.web>
      <compilation>
         <assemblies>
             <add assembly="Microsoft.ReportViewer.Common... />
             <add assembly="Microsoft.ReportViewer.WinForms... />
             <add assembly="System.DirectoryServices... />
             <add assembly="System.Windows.Forms... />
             <add assembly="ADODB... />
             <add assembly="System.Management... />
             <add assembly="System.Data.OracleClient... />
             <add assembly="Microsoft.Build.Utilities... />
             <add assembly="Microsoft.ReportViewer.ProcessingObjectModel... />
             <add assembly="System.Design... />
             <add assembly="Microsoft.Build.Framework... />
         </assemblies>
      </compilation>
   </system.web>
</configuration>

Nenhum desses conjuntos é necessário e a maioria não existe no teste de destino, ou produção, servidores.

Eu continuo excluindo -os toda vez que construo, mas está ficando real irritante muito rápido.

No momento, minha solução alternativa é deixar o Web.config somente leitura - para que o Visual Studio não possa adicionar conjuntos.


Atualizar

Capturas de tela como prova:

Páginas de propriedade do projeto antes:

link text

Web.config antes:

alt text

Páginas de propriedade do projeto após:

alt text

Web.config depois:

alt text

Atualizar dois

Deve-se apontar explicitamente que o site da Web funciona sem que essas referências estranhas sejam adicionadas. Minha solução provisória é manter o web.config somente leitura e acertar Cancelar Sempre que o Visual Studio reclama que é somente leitura, pois tenta modificá-lo. Se eu puder impedir o Visual Studio de tentar modificá -lo em primeiro lugar ...


Atualizar três

Parece que não é possível. Alguém pode se sentir à vontade para dar a resposta correta, "Você não pode impedir o Visual Studio de adicionar assemblies ao seu web.config. "E eu vou marcar.

A única razão pela qual estou mantendo a pergunta é que, esperançosamente, alguém conhece a opção super-secreta, ou chave de registro, ou configuração de projeto ou solução, para dizer ao Visual Studio para parar de pensar.


Atualizar quatro

Eu não aceitei a resposta aceita e a inaceitava se pudesse. Ainda estou esperando a panacéia. Mas agora estou inclinado para:

  • Resposta: Não pode ser feito (Manu08)
  • Solução alternativa: Chave do Registro de Assembléias GAC filtrada (Nebakanezer)

Como faço para impedir que o Visual Studio adicione assemblies ao meu web.config?

Referências

Foi útil?

Solução

Usei o VS2005 para editar um .NET 1.1 (vs2003) .aspx e salvei, então o web.config terá misteriosamente a rede. 2.0 Assembléias adicionadas:

Se eu usei o VS2008 ou o VS2010, isso não acontece. Então, acredito que este é um bug no VS2005 IDE.

Outras dicas

Talvez a "Biblioteca Avatar Dotnet" esteja referenciando esses conjuntos por si só. As referências de uma montagem referenciada são necessárias para implantar corretamente um projeto. Caso contrário, como a montagem referenciada poderia funcionar?

Observe que é possível que sua montagem referenciada não use suas próprias referências, embora existam.

EDIT: Você pode usar a excelente ferramenta ".NET Reflector" para verificar isso.

Tive esse problema com o Visual Studio 2005 (mas estou feliz em relatar que a solução funciona para o VS 2008, veja o texto em negrito abaixo). Existe uma seção de registro que verifica os verificações antes de adicionar conjuntos ao arquivo web.config.

Aqui está a chave:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences

Então, digamos que você não queira que o Visual Studio adicione o Microsoft.VisualStudio.Designer.Interfaces Assembly ao seu web.config. Adicione a seguinte entrada ao seu registro e você está definido.

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\8.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences\Microsoft.VisualStudio.Designer.Interfaces

Funcionou perfeitamente para mim. E sim, o resto da sua equipe terá que fazer o mesmo, mas pelo menos você não precisa remover manualmente as entradas todas as vezes :)

Para fazê -lo funcionar para vs 2008 - basta alterar o 8.0 no caminho do registro para 9.0

Converter seu projeto de "site" em um projeto de "aplicativo da web".

Um "site" não possui um arquivo de projeto, por isso contém todas as referências de montagem no web.config. Um "projeto da web" tem um arquivo de projeto e todas as referências são armazenadas no arquivo do projeto.

Remova as referências.

  • Se for um aplicativo da web: você pode ver as referências em Solution Explorer.

  • Se for um site: clique com o botão direito do mouse no projeto no Solution Explorer, selecione Páginas de propriedade. Gerencie -os lá.

Hth

Se uma assembléia compartilhada faz referência a eles, eles também serão adicionados ao projeto de chamada.

Como a Biblioteca Avatar faz essas outras referências, o Visual Studio também adiciona essas referências ao projeto principal. Caso contrário, uma chamada para a biblioteca Avatar poderia falhar, pois a referência necessária está faltando.

Bem, isso pode parecer um hack, mas, dado o seu requisito, outra opção seria carregar a montagem do Avatar dinamicamente usando o conjunto. Carregar ou carregar no tempo de execução. Isso manteria uma referência fora do projeto principal e deve impedir as linhas de referência extras no web.config. Isso só seria realmente prático se você estivesse usando apenas um pequeno número de classes do projeto Avatar. Eu faria um terceiro projeto que ambos os projetos referenciaram que mantinham interfaces que uma ou mais classes de avatar implementaram para que o projeto principal mantenha a digitação estrita ao lidar com instâncias de avatar. Admito que isso pode ser muito mais trabalho que enviou respostas anteriormente. Se você estiver interessado neste método, pesquise no Google por criar plugins no .net

Enquanto você estiver usando um site, em vez de um webapp, não conheço nenhuma maneira de impedir o Visual Studio de adicionar montagens ao seu web.config. Esse mesmo problema também acontece para as soluções da minha empresa.

Você não pode impedir o Visual Studio de adicionar montagens ao seu web.config.

Desculpe, você não pode impedir o Visual Studio de adicionar assemblies ao seu web.config, Mas tudo não está perdido.

Eu atingi isso no passado; Alguém havia adicionado algumas referências (incluindo Winforms) a um conjunto de acesso de dados de baixo nível. O site da Web usou o conjunto de acesso de dados de baixo nível e, portanto, tinha Winforms etc. adicionados ao arquivo web.config.

A solução foi mover seu código para o conjunto correto e remover a referência incorreta.

Se você não pode classificar como a montagem que tem as referências indesejadas e sabe que não está chamando o código que depende das referências indesejadas. Então você pode (nenhum deles é bom)

  • Escreva uma ação de instalação personalizada que automatize a remoção dessas referências de montagem indesejadas do web.config
  • Escreva uma ação personalizada de msbuild para remover e então no momento da construção
  • Use um arquivo web.config escrito à mão diferente quando o aplicativo estiver instalado.

Pode levar muito tempo para descobrir por que o Visual Studio está adicionando uma referência ao arquivo web.config. Você precisa verificar cada montagem que é usada diretamente ou indiretamente pelo site.

Eu sei e aprecio por que a Microsoft inventou sites no ASP.NET 2.0, mas às vezes eles simplesmente sugar. Se for prático para você, converta seu site em um projeto de aplicativo da Web e problemas como esse desaparecerão.

Se isso não for prático para você, tente re-fator o máximo de código possível em um projeto de biblioteca de classes separado. Quaisquer referências que você possa sair do site e para a biblioteca de classe será reduzida web.config mudanças.

EDITAR: Para esclarecer, em um site, o ASPNET Compiler compila tudo (markup, código-behind, o lote), então todas as referências de montagem devem entrar em web.config. No entanto, em um projeto de aplicativo da Web, o compilador C# ou VB compila os arquivos Code-Behind em uma DLL separada, que é referenciada pelo compilador ASPNET quando compila a marcação. Nesse cenário, assembléias que são apenas referenciado em arquivos de código-behind entrará na DLL de código-behind e não tocará web.config de forma alguma. Apenas conjuntos que são referenciado diretamente na marcação vai entrar web.config.

Não acredito que você possa impedir que o Visual Studio adicione automaticamente referências a montagens que são referenciadas por outras pessoas.

Uma solução é criar um projeto de configuração da Web com uma ação personalizada que automatiza a remoção dessas referências de montagem indesejadas do web.config.

Essas são todas as montagens exigidas pelo seu projeto, em alguma forma ou mansão e a ajuda da compilação que o ASP.NET faz em suas páginas em tempo de execução. Eles provavelmente estão sendo importados pelo código que você está usando no seu projeto ou em outra biblioteca que os está usando.

Mas de acordo com o documentação. Estes são os conjuntos definidos em sua web global.config que podem ser encontrados em C:\Windows\Microsoft.NET\Framework\v2.0.50727\CONFIG:

<assemblies>
    <add assembly="mscorlib" />
    <add assembly="System, ..." />
    <add assembly="System.Configuration, ..." />
    <add assembly="System.Web, ..." />
    <add assembly="System.Data, ..." />
    <add assembly="System.Web.Services, ..." />
    <add assembly="System.Xml, ..." />
    <add assembly="System.Drawing, ..." />
    <add assembly="System.EnterpriseServices, ..." />
    <add assembly="System.Web.Mobile, ..." />
    <add assembly="*" />
</assemblies>

Se você olhar, existe um assembly="*" referência sendo adicionada. E se você ler o documentação sobre este comando, diz:

Opcionalmente, você pode especificar o caractere curinga asterisk (*) para adicionar todas as montagens dentro do cache de montagem privada para o aplicativo, localizado no subdiretório bin de um aplicativo ou no diretório de instalação da estrutura. Microsoft.Net Framework Version).

Isso significa que qualquer montagem no seu diretório /bin ou no diretório de instalação do .NET Framework já será incluído.

O que isso me diz sobre o seu problema é que os assembléias que estão sendo incluídos já estão referenciados de alguma forma ao seu projeto. E eles provavelmente estão vindo do Avatar Dot Net Library ou alguns controles em sua página. Verifique a pasta "Referências" em seu projeto Visual Studio na biblioteca Avatar para essas referências que você não deseja. Porque é daí que o processo de construção obtém essas bibliotecas.

Portanto, em outras palavras, se você não quiser que eles sejam incluídos, esfregue seus projetos referenciados de todas as referências dessas bibliotecas.

Como alternativa, você pode usar um analisador MSBuild XML para soltar a seção da web.config cada vez que executa seu processo de construção. Pessoalmente eu uso uma tarefa chamada XmlUpdate Para modificar certas partes do meu web.config para preparar a produção. Se você gostaria de fazer o mesmo, faz parte do Tarefas da comunidade msbuild.

Se você estiver em execução em uma máquina Vista ou Server 08, poderá usar o utilitário de linha de comando AppCMD para removê -lo após a reconstrução, em vez de removê -lo manualmente.

http://technet.microsoft.com/en-us/library/cc772200(ws.10).aspx http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe/

Vejo http://msdn.microsoft.com/en-us/library/ms178728.aspx

Lá se explica que o que você vê na página de propriedades não é todas, existem referências implícitas também no arquivo Machine.config e são adicionadas no horário de compilação. Espero que isto ajude.

Começaria verificando as instruções "usando" em seus arquivos de código, bem como quaisquer referências nos seus arquivos .aspx .ascx. Parece que você referenciou alguns deles (sei que alguns são adicionados por padrão dos novos modelos de item.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top