Comment arrêter Visual Studio ajouter des assemblages à mon web.config?
chaque fois que je construis ou publie un site Web, Visual Studio Tente de consulter le site .config fichier afin qu'il puisse ajouter de nombreux assemblages qui ne sont pas nécessaires.
en d'autres termes:
web.config avant:
<configuration>
<system.web>
<compilation>
<assemblies>
</assemblies>
</compilation>
</system.web>
</configuration>
web.config après:
<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>
aucun de ces ensembles n'est requis, et la plupart n'existe pas sur les serveurs de test ou de production.
Je n'arrête pas de les supprimer chaque fois que je construis, mais il obtient réel ennuyeux très rapide.
en ce moment, ma solution est de quitter web.config en lecture seule, afin que Visual Studio ne peut pas ajouter des assemblées.
mise à Jour
Captures d'écran comme preuve:
Propriétés Du Projet Pages avant :
texte du lien http://i26.tinypic.com/206c46c.jpg
Web.Config avant:
alt texte http://i31.tinypic.com/30rr728.jpg
Pages de propriétés du Projet après:
alt texte http://i27.tinypic.com/25a3z2x.jpg
Web.config après:
alt texte http://i32.tinypic.com/2pq6w4w.jpg
Mettre À Jour Les Deux
Il convient de souligner explicitement que le site web fonctionne sans ces étrangers références ajoutées. Ma solution provisoire est de garder web.config en lecture seule, puis cliquez sur Annuler chaque fois que Visual Studio se plaint qu'elle est en lecture seule car il essaie de de le modifier. Si je peux arrêter Visual Studio d'essayer de le modifier...
Mise À Jour De Trois
on dirait que c'est impossible. Quelqu'un peut se sentir libre de donner la bonne réponse, " vous ne pouvez pas empêcher Visual Studio d'ajouter des assemblages à votre web.config ."et je vais le marquer.
la seule raison pour laquelle je garde la question Est que j'espère que quelqu'un sait option super-secret, ou clé de registre, ou réglage de projet ou de solution, pour dire à Visual Studio d'arrêter de penser.
Mise À Jour De Quatre
Je n'ai pas accepté la réponse acceptée, et je ne l'aurais pas acceptée si je le pouvais. j'espère toujours la panacée. Mais en ce moment je penche vers:
- réponse: Impossible à faire ( manu08 )
- solution de contournement: Gac filtré clé de registre des assemblages ( Nébakanezer )
Comment puis-je empêcher Visual Studio d'ajouter des assemblages à mon site web.config?
Références
- ASP Net - Visual Studio ne cesse d'ajouter de Oracle assemblées sur le web.config
- pourquoi les assemblages complémentaires de Visual Studio sont-ils ajoutés à mon Web.config?
- Visual Studio Ajoute de l'Assemblée de Référence sur le web.config
- suppression du site VSW.Assembly à partir du Web.Config
- Visual Studio 2005 ajoutant automatiquement des références au web.config à construire
16 réponses
j'ai utilisé VS2005 pour éditer un .net 1.1 (VS2003) .aspx et sauvé, puis le web.config aura mystérieusement le filet. 2.0 assemblages ajoutés:
si j'ai utilisé VS2008 ou VS2010, cela ne se produit pas. Donc je crois que c'est un bug dans L'IDE VS2005.
peut-être que la" bibliothèque DotNet Avatar " fait référence à ces assemblées par elle-même. Les références d'un assemblage sont nécessaires pour déployer correctement un projet. Sinon, comment l'assemblage référencé pourrait-il fonctionner?
notez Qu'il est possible que votre assemblage référencé n'utilise pas ses propres références, bien qu'elles existent.
Edit: vous pouvez utiliser le grand outil ".net Reflector" pour vérifier cela.
J'ai eu ce problème avec Visual Studio 2005 (mais je suis heureux d'annoncer que la solution fonctionne pour VS 2008, voir le texte en caractères gras ci-dessous). Il y a une section registre que VS vérifie avant d'ajouter des assemblages au web.fichier de configuration.
Voici la clé:
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences
donc, disons que vous ne voulez pas que Visual Studio ajoute le Microsoft.VisualStudio.Designer.L'assemblage des Interfaces à votre web.config. Ajouter l'entrée suivante à votre registre et vous sont fixés.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio.0\Projects\{E24C65DC-7377-472B-9ABA-BC803B73C61A}\FilteredGACReferences\Microsoft.VisualStudio.Designer.Interfaces
ça a parfaitement fonctionné pour moi. Et oui, le reste de votre équipe auront à faire de même, mais au moins vous n'avez pas à supprimer manuellement les entrées de tous les temps :)
pour le faire fonctionner pour VS 2008 juste changer le 8.0 dans le chemin d'accès du registre de 9.0
Convertissez votre projet de " Site Web "en un projet d '"Application Web".
Un "Site Web" ne dispose pas d'un fichier de projet, donc il contient toutes les références d'assembly dans le web.config. Un "projet Web" a un dossier de projet, et toutes les références sont stockées dans le dossier de projet.
supprimer les références.
-
si c'est une application web: vous pouvez voir les références sous Solution Explorer .
-
si c'est un site web: Faites un clic droit sur le projet sur Solution Explorer puis sélectionnez pages de propriétés . Les gérer.
HTH
si une assemblée partagée les fait référence, alors ils seront ajoutés au projet calling.
puisque la bibliothèque Avatar fait ces autres références, Visual Studio ajoute aussi ces références au projet principal. Sinon, un appel dans la bibliothèque Avatar pourrait échouer puisque la référence dont elle a besoin est manquante.
cela peut sembler être un piratage, mais étant donné vos besoins, une autre option serait de charger l'ensemble Avatar de façon dynamique en utilisant Assembly.Chargez ou chargez à partir de l'exécution. Cela éviterait toute référence au projet principal et éviterait les lignes de référence supplémentaires dans le web.config. Ce serait vraiment pratique si vous utilisez uniquement un petit nombre de classes de l'Avatar projet. Je voudrais faire un troisième projet, que les deux projets référencés tenue interfaces qu'une ou plusieurs classes Avatar ont implémentées afin que le projet principal maintienne une Dactylographie stricte lors de la gestion des instances Avatar. J'avoue que cela pourrait être beaucoup plus de travail que précédemment ont présenté des réponses. Si vous êtes intéressé par cette méthode, utilisez google pour créer des plugins dans .Net
tant que vous utilisez un site Web, plutôt qu'une webapp, Je ne sais pas comment empêcher Visual Studio d'ajouter des assemblages à votre web.config. Ce même problème se produit aussi pour les solutions de mon entreprise.
vous ne pouvez pas empêcher Visual Studio d'ajouter des assemblages à votre web.config.
Désolé, vous ne pouvez pas empêcher Visual Studio d'ajouter des assemblages à votre web.config , mais tout n'est pas perdu.
Je l'ai déjà fait dans le passé; quelqu'un avait ajouté quelques références (y compris WinForms) à un assemblage bas niveau d'accès aux données. Le site Web a utilisé l'assemblage d'accès de données de bas niveau et a donc eu WinForms etc ajouté au web.fichier de configuration.
la solution était de déplacer son code dans le bon ensemble et supprimer la référence incorrecte.
si vous ne pouvez pas trier comment l'assemblée qui a les références indésirables et vous savez que vous n'appelez pas le code qui dépend des références indésirables. Alors vous pouvez (aucun de ceux-ci ne sont bons)
- écrivez une action d'installation personnalisée qui automatise la suppression de ces références d'assemblage indésirables sur le web.config
- écrire une action personnalisée MSBUILD pour supprimer alors au moment de la construire
- utilisez un autre web écrit à la main.fichier de configuration lorsque l'application est installée.
cela peut prendre des siècles pour comprendre pourquoi Visual Studio ajoute une référence au web.fichier de configuration. Vous devez vérifier manuellement chaque assemblage qui est utilisé directement ou indirectement par le site web.
je sais et j'apprécie pourquoi Microsoft a inventé des Sites Web dans ASP.NET 2.0, mais parfois ils sont tout simplement sucer . S'il est pratique pour vous, convertir votre site à un projet D'Application Web, et des problèmes comme celui-ci disparaîtra.
si ce n'est pas pratique pour vous, essayez de recalibrer autant de code que possible dans un projet de bibliothèque de classe séparée. Toutes les références que vous pouvez déplacer hors du site web et dans la bibliothèque de classe sera réduit sur web.config
change.
EDIT: pour clarifier, dans un Site Web, le compilateur aspnet compile tout (markup, code-behind, le lot), de sorte que toutes les références d'assemblage doivent aller dans web.config
. Cependant, dans un projet D'Application Web, le compilateur C# ou VB compile les fichiers code-behind dans une DLL séparée, qui est alors référencée par le compilateur aspnet quand il compile le markup. Dans ce scénario, les assemblages qui sont seulement référencés en code-behind files va entrer dans le code-derrière DLL et ne pas toucher web.config
du tout. Seuls les assemblages directement référencés dans le balisage seront considérés comme web.config
.
Je ne crois pas que vous puissiez empêcher Visual Studio d'ajouter automatiquement des références à des assemblages référencés par d'autres.
une solution est de créer un projet de configuration Web avec une action personnalisée qui automatise
la suppression de ces références d'assemblage non désirées du web.config
.
ce sont toutes les assemblées requises par votre projet, dans une forme ou un manoir et l'aide la compilation que ASP.NET fait sur vos pages à l'exécution. Ils sont probablement importés par le code que vous utilisez dans votre projet ou par une autre bibliothèque qui les utilise.
mais selon la "documentation 151990920". Ce sont les assemblages définis dans votre web global.config qui se trouve dans 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>
si vous regardez, il y a une référence assembly="*"
qui est ajoutée. Et si vous lisez la documentation à propos de cette commande il est dit:
optionnellement, vous pouvez spécifier le astérisque caractère générique (*) pour ajouter chaque assemblée dans le privé cache d'assemblage pour l'application, qui se trouve soit dans le \ bin sous-répertoire d'une application ou dans the.NET installation de la charpente répertoire (%systemroot% \ Microsoft.NET\Framework\version).
cela signifie que tout assemblage dans votre répertoire /bin ou dans le répertoire D'installation de .net Framework sera déjà inclus.
ce que cela me dit à propos de votre problème est que ces assemblages qui sont inclus sont déjà référencés d'une certaine manière à votre projet. Et ils viennent probablement du Avatar Dot Net Library
ou de quelques contrôles sur votre page. Check le dossier "Références" dans votre projet Visual Studio sur la bibliothèque Avatar pour ces références dont vous ne voulez pas. Parce que c'est là le processus de construction de ces bibliothèques.
Donc, en d'autres termes, si vous ne voulez pas qu'ils soient inclus frottez vos projets référencés de toutes les références de ces bibliothèques.
vous pouvez aussi utiliser un analyseur XML MSBuild pour supprimer cette section du web.config à chaque fois que vous exécutez votre construction processus. Personnellement, j'utilise une tâche appelée XmlUpdate
pour modifier certaines parties de mon web.config pour l'obtenir prêt pour la production. Si vous souhaitez faire de même, il fait partie des MSBuild Community Tasks .
si vous utilisez une machine vista ou server 08, Vous pouvez utiliser l'utilitaire de ligne de commande appcmd pour la supprimer après la reconstruction plutôt que de la supprimer manuellement.
http://technet.microsoft.com/en-us/library/cc772200(WS.10).aspx 151940920" http://learn.iis.net/page.aspx/114/getting-started-with-appcmdexe /
voir http://msdn.microsoft.com/en-us/library/ms178728.aspx
là, il est expliqué que ce que vous voyez dans la page de propriété n'est pas tout, les références implicites existent aussi dans la Machine.le fichier de configuration et sont ajoutés au moment de la compilation. Espérons que cette aide.
je commencerais par vérifier les états d '"utilisation" dans vos fichiers de code ainsi que toute référence dans vos .aspx, .fichiers ascx. Il semble que vous avez référencé certains de ces (je sais que certains sont ajoutés par défaut de l'Add New Item templates.