Как остановить добавление сборок Visual Studio в мой web.config? - PullRequest
24 голосов
/ 10 сентября 2009

Каждый раз, когда я создаю или публикую веб-сайт, 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 только для чтения и нажимать Cancel всякий раз, когда Visual Studio жалуется, что он доступен только для чтения, когда пытается изменить его. Если я могу просто остановить Visual Studio от попыток изменить его в первую очередь ...


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

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

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


Обновление четыре

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

  • Ответ: не может быть сделано ( manu08 )
  • Обходной путь: раздел реестра отфильтрованных сборок GAC ( Nebakanezer )

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

Ссылки

Ответы [ 16 ]

6 голосов
/ 16 сентября 2009

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

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

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

4 голосов
/ 28 сентября 2012

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

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

3 голосов
/ 16 сентября 2009

У меня была эта проблема с 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

2 голосов
/ 17 сентября 2009

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

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

1 голос
/ 22 сентября 2009

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

1 голос
/ 20 сентября 2009

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

1 голос
/ 20 сентября 2009

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

.
1 голос
/ 19 сентября 2009

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

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

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

1 голос
/ 16 сентября 2009

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

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

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

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

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

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

1 голос
/ 16 сентября 2009

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

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

...