Как остановить Visual Studio, добавляющую сборки в мой web.config?

StackOverflow https://stackoverflow.com/questions/1401897

Вопрос

Каждый раз, когда я создаю или публикую веб-сайт, Visual Studio пытается проверить web.конфигурация файл, чтобы в него можно было добавлять множество сборок, которые не требуются.

Другими словами:

web.конфигурация до того , как:

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

web.конфигурация после:

<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>

Ни одна из этих сборок не требуется, и большинство из них не существуют на целевых тестовых или производственных серверах.

я продолжаю удалять их каждый раз при сборке, но это становится реальный раздражает очень быстро.

Прямо сейчас мой обходной путь - оставить web.config доступным только для чтения, чтобы Visual Studio не могла добавлять к нему сборки.


Обновить

Скриншоты в качестве доказательства:

Страницы свойств проекта перед:

link text

Web.Config перед:

alt text

Страницы свойств проекта после:

alt text

Web.config после:

alt text

Обновление Второе

Следует четко указать, что веб-сайт работает без добавления этих посторонних ссылок.Мое временное решение состоит в том, чтобы сохранить web.config доступным только для чтения и нажать Отмена всякий раз, когда Visual Studio жалуется, что она доступна только для чтения, когда пытается ее изменить.Если бы я мог просто остановить Visual Studio от попыток изменить его в первую очередь...


Обновление Третье

Похоже, что это невозможно.Кто-нибудь может смело дать правильный ответ ".Вы не можете запретить Visual Studio добавлять сборки в ваш web.config." и я отмечу это.

Единственная причина, по которой я продолжаю задавать этот вопрос, заключается в том, что, надеюсь, кто-нибудь знает суперсекретную опцию, или раздел реестра, или параметр проекта или решения, чтобы сообщить Visual Studio прекратить думать.


Обновление Четвертое

я не принял общепринятый ответ, и я бы отклонил его, если бы мог.я все еще надеюсь на панацею.Но прямо сейчас я склоняюсь к:


Как мне запретить Visual Studio добавлять сборки в мой web.config?

Ссылки

Это было полезно?

Решение

Я использовал VS2005 для редактирования .net 1.1 (VS2003) .aspx и сохранил его, тогда web.config таинственным образом будет иметь сеть.добавлены сборки 2.0:

Если бы я использовал VS2008 или VS2010, этого не произошло.Поэтому я считаю, что это ошибка в VS2005 IDE.

Другие советы

Возможно, "Библиотека Avatar DotNet" сама ссылается на эти сборки.Ссылки на сборку, на которую есть ссылка, необходимы для правильного развертывания проекта.В противном случае, как могла бы работать упомянутая сборка?

Обратите внимание, что возможно, что ваша ссылочная сборка не использует свои собственные ссылки, хотя они существуют.

Редактировать:Вы можете использовать отличный инструмент ".Net Reflector", чтобы проверить это.

У меня была эта проблема с Visual Studio 2005 (но я рад сообщить, что решение работает для версии 2008, см. Выделенный жирным шрифтом текст ниже).Существует раздел реестра, который VS проверяет перед добавлением сборок в файл web.config.

Вот ключ к разгадке:

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

Итак, допустим, вы не хотите, чтобы Visual Studio добавляла сборку Microsoft.VisualStudio.Designer.Интерфейсы в ваш web.config.Добавьте следующую запись в свой реестр, и все готово.

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

У меня это сработало идеально.И да, остальным членам вашей команды придется делать то же самое, но, по крайней мере, вам не придется каждый раз вручную удалять записи :)

Чтобы заставить это работать для VS 2008 - просто измените 8.0 в пути к реестру на 9.0

Преобразуйте ваш проект "Веб-сайт" в проект "Веб-приложение".

У "Веб-сайта" нет файла проекта, поэтому он содержит все ссылки на сборки в web.config."Веб-проект" имеет файл проекта, и все ссылки хранятся в файле проекта.

Удалите ссылки.

  • Если это веб-приложение:вы можете ознакомиться со Ссылками в разделе Обозреватель решений.

  • Если это веб-сайт:щелкните правой кнопкой мыши проект в Обозревателе решений и выберите Страницы свойств.Управляйте ими там.

HTH

Если на них ссылается общая сборка, то они также будут добавлены в вызывающий проект.

Поскольку библиотека Avatar создает эти другие ссылки, Visual Studio также добавляет эти ссылки в основной проект.В противном случае вызов библиотеки Avatar может завершиться неудачей, поскольку необходимая ссылка отсутствует.

Что ж, это может показаться взломом, но, учитывая ваши требования, другим вариантом было бы динамически загружать сборку аватара с помощью Assembly.Load или LoadFrom во время выполнения.Это позволило бы исключить ссылку из основного проекта и затем должно было бы предотвратить появление дополнительных ссылочных строк в web.config.Однако это было бы действительно практично только в том случае, если бы вы использовали только небольшое количество классов из проекта Avatar.Я бы создал третий проект, на который ссылались оба проекта, содержащий интерфейсы, реализованные одним или несколькими классами Avatar, чтобы основной проект поддерживал строгую типизацию при обработке экземпляров Avatar.Я признаю, что это могло бы потребовать намного больше работы, чем ранее представленные ответы.Если вас интересует этот метод, найдите в Google информацию о создании плагинов в .Net

Пока вы используете веб-сайт, а не веб-приложение, я не знаю ни одного способа запретить Visual Studio добавлять сборки в ваш web.config.Такая же проблема возникает и с решениями моей компании.

Вы не можете запретить Visual Studio добавлять сборки в ваш web.config.

Извините, вы не можете запретить Visual Studio добавлять сборки в ваш web.config, но еще не все потеряно.

Я сталкивался с этим в прошлом;кто-то добавил некоторые ссылки (включая WinForms) на сборку доступа к данным низкого уровня.Веб-сайт использовал сборку доступа к данным низкого уровня и, следовательно, в файл web.config были добавлены WinForms и т.д.

Решение состояло в том, чтобы переместить его код в правильную сборку и удалить неправильную ссылку.

Если вы не можете отсортировать сборку, содержащую нежелательные ссылки, и вы знаете, что не вызываете код, который зависит от нежелательных ссылок.Тогда вы можете (ни одно из этих действий не является приятным)

  • Напишите пользовательское действие установки, которое автоматизирует удаление этих нежелательных ссылок на сборки из web.config
  • Напишите пользовательское действие MSBUILD для удаления затем во время сборки
  • Используйте другой рукописный файл web.config при установке приложения.

Может потребоваться целая вечность, чтобы выяснить, почему Visual Studio добавляет ссылку на файл web.config.Вы должны вручную проверять КАЖДУЮ сборку, которая используется прямо или косвенно веб-сайтом.

Я знаю и ценю, почему Microsoft изобрела веб-сайты в версии ASP.NET 2.0, но иногда они просто сосать.Если это практично для вас, преобразуйте свой сайт в проект веб-приложения, и подобные проблемы исчезнут.

Если это непрактично для вас, попробуйте перенести как можно больше кода в отдельный проект библиотеки классов.Любые ссылки, которые вы можете перенести с веб-сайта в библиотеку классов, сократят web.config Изменения.

Редактировать: Чтобы уточнить, на веб-сайте компилятор aspnet компилирует все (разметку, исходный код, многое другое), поэтому все ссылки на сборки должны входить в web.config.Однако в проекте веб-приложения компилятор C # или VB компилирует файлы, лежащие в основе кода, в отдельную библиотеку DLL, на которую затем ссылается компилятор aspnet при компиляции разметки.В этом сценарии сборки, которые являются ссылки содержатся только в файлах, содержащих код войдет в DLL-файл с кодом и не коснется web.config вообще.Только сборки , которые являются прямая ссылка в разметке войдет в web.config.

Я не верю, что вы можете запретить Visual Studio автоматически добавлять ссылки на сборки, на которые ссылаются другие.

Одним из решений является создание проекта веб-настройки с пользовательским действием, которое автоматизирует удаление этих нежелательных ссылок на сборки из web.config.

Это все сборки, требуемые вашим проектом, в той или иной форме или manor и вспомогательные для компиляции, которая ASP.NET выполняется на ваших страницах во время выполнения.Вероятно, они импортируются либо с помощью кода, который вы используете в своем проекте, либо с помощью другой библиотеки, которая их использует.

Но, согласно Документация.Это сборки, определенные в вашем global web.config, которые можно найти в 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>

Если вы посмотрите, там есть assembly="*" ссылка добавляется.И если вы прочтете Документация об этой команде в нем говорится:

Необязательно, вы можете указать подстановочный знак звездочка (*) для добавления каждой сборки в пределах частного кэша сборок для приложения, который расположен либо в \bin подкаталоге приложения, либо в установка.NET Framework каталог (%systemroot%\Microsoft.NET\Framework\version).

Это означает, что любая сборка в вашем каталоге /bin или в каталоге установки .NET Framework уже будет включена.

Что это говорит мне о вашей проблеме, так это то, что те сборки, которые включаются, уже каким-то образом связаны с вашим проектом.И они, вероятно, исходят из Avatar Dot Net Library или некоторые элементы управления на вашей странице. Проверьте папку "Ссылки" в вашем проекте Visual Studio в библиотеке Avatar на наличие этих ссылок, которые вам не нужны.Потому что именно оттуда процесс сборки получает эти библиотеки.

Другими словами, если вы не хотите, чтобы они были включены, очистите свои проекты, на которые даны ссылки, от всех ссылок на эти библиотеки.

В качестве альтернативы вы можете использовать анализатор XML MSBuild, чтобы удалять этот раздел web.config при каждом запуске процесса сборки.Лично я использую задачу под названием XmlUpdate изменить определенные части моего web.config, чтобы подготовить его к работе.Если вы хотели бы сделать то же самое, это часть Задачи сообщества MSBuild.

Если вы работаете на компьютере с Vista или server 08, вы можете использовать утилиту командной строки appcmd, чтобы удалить ее после перестройки, а не удалять вручную.

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

видишь http://msdn.microsoft.com/en-us/library/ms178728.aspx

там объясняется, что то, что вы видите на Странице свойств, - это еще не все, неявные ссылки существуют также в файле Machine.config и добавляются во время компиляции.Надеюсь, это поможет.

Я бы начал с проверки статутов "using" в ваших файлах кода, а также любых ссылок в ваших файлах .aspx, .ascx.Похоже, вы ссылались на некоторые из них (я знаю, что некоторые добавляются по умолчанию из шаблонов Добавления новых элементов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top