Подтвердить что ты не робот

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

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

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

web.config перед:

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

web.config после:

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

Рекомендации

4b9b3361

Ответ 1

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

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

Ответ 2

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

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

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

Ответ 3

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

Вот ключ:

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

Итак, скажем, вы не хотите, чтобы Visual Studio добавляла сборку Microsoft.VisualStudio.Designer.Interfaces к вашему 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

Ответ 4

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

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

Ответ 5

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

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

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

НТН

Ответ 6

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

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

Ответ 7

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

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

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

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

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

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

Ответ 11

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

Ответ 12

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

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

Ответ 13

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

Но согласно документации. Это сборки, определенные в вашем глобальном 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\версия).

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

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

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

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

Ответ 15

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

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

Ответ 16

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