如何阻止Visual Studio向我的web.config添加程序集?

时间:2009-09-09 20:27:46

标签: visual-studio assemblies web-config dependencies

每次构建或发布网站时,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停止思考。


更新四

我没有接受接受的答案,如果可以,我会接受它。我仍然希望有灵丹妙药。但是现在我倾向于:

  • 答案:无法完成(manu08
  • 解决方法:已过滤的GAC程序集注册表项(Nebakanezer

如何阻止Visual Studio将程序集添加到我的web.config?

参考

16 个答案:

答案 0 :(得分:6)

也许“阿凡达DotNet库”本身就是引用这些程序集。 需要引用程序集的引用才能正确部署项目。 否则,引用的程序集如何工作?

请注意,引用的程序集可能不会使用自己的引用,尽管它们存在。

编辑:你可以使用伟大的工具“.Net Reflector”来检查这个。

答案 1 :(得分:4)

我使用VS2005编辑.net 1.1(VS2003).aspx并保存它,然后web.config将神秘地拥有网络。添加了2.0个组件:

如果我使用VS2008或VS2010,则不会发生这种情况。所以我相信这是VS2005 IDE中的一个错误。

答案 2 :(得分:3)

我在Visual Studio 2005中遇到了这个问题(但我很高兴地报告该解决方案适用于VS 2008,请参阅下面的粗体文字)。在将程序集添加到web.config文件之前,VS会检查一个注册表部分。

这是关键:

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

答案 3 :(得分:2)

将“网站”项目转换为“Web应用程序”项目。

“网站”没有项目文件,因此它包含web.config中的所有程序集引用。 “Web项目”有一个项目文件,所有引用都存储在项目文件中。

答案 4 :(得分:1)

删除引用。

  • 如果是网络应用:您可以在解决方案资源管理器下看到参考。

  • 如果是网站:右键单击解决方案资源管理器上的项目,然后选择属性页。在那里管理它们。

HTH

答案 5 :(得分:1)

如果共享程序集引用它们,那么它们也将被添加到调用项目中。

由于Avatar库提供了这些其他引用,因此Visual Studio也会将这些引用添加到主项目中。否则,对Avatar库的调用可能会失败,因为它缺少所需的引用。

答案 6 :(得分:1)

抱歉,您无法阻止Visual Studio将程序集添加到您的web.config ,但所有内容都不会丢失。

我过去曾经打过这个;有人在低级数据访问程序集中添加了一些引用(包括WinForms)。该网站使用了低级数据访问程序集,因此在Web.config文件中添加了WinForms等。

解决方案是将他的代码移动到正确的程序集中并删除不正确的引用。

如果您无法对具有不需要的引用的程序集进行排序,并且您知道您没有调用依赖于不需要的引用的代码。那么你可以(这些都不好)

  • 编写自定义安装操作,以自动从web.config
  • 中删除这些不需要的程序集引用
  • 编写自定义MSBUILD操作以在构建时删除
  • 安装应用程序时使用另一个手写的web.config文件。

要查找Visual Studio添加对web.config文件的引用的原因,可能需要很长时间。您必须手动检查网站直接或间接使用的每个程序集。

答案 7 :(得分:1)

我知道并理解为什么微软在ASP.NET 2.0中发明了网站,但有时他们只是简单地 suck 。如果它对您来说很实用,请将您的站点转换为Web应用程序项目,这样的问题就会消失。

如果这对您不切实际,请尝试将尽可能多的代码重新分配到单独的类库项目中。您可以移出网站并进入类库的任何引用都将减少web.config更改。

编辑:为了澄清,在网站中,aspnet编译器会编译所有内容(标记,代码隐藏,批次),因此所有程序集引用都必须进入web.config。但是,在Web应用程序项目中,C#或VB编译器将代码隐藏文件编译为单独的DLL,然后在编译标记时由aspnet编译器引用。在这种情况下,仅在代码隐藏文件中引用的程序集将进入代码隐藏DLL而不会触及web.config。只有在标记中直接引用的程序集才会进入web.config

答案 8 :(得分:1)

这可能看起来像是一个hack但是根据你的要求,另一个选择是在运行时使用Assembly.Load或LoadFrom动态加载Avatar程序集。这将保留主项目的引用,然后应该阻止web.config中的额外引用行。如果您只使用Avatar项目中的少量类,这只会非常实用。我将制作第三个项目,两个项目都引用了一个或多个Avatar类实现的接口,以便主项目在处理Avatar实例时保持严格的输入。我承认这可能是以前提交答案的更多工作。如果您对此方法感兴趣,请搜索google以在.Net中创建插件

答案 9 :(得分:1)

只要您使用的是网站而不是网络应用程序,我就不知道有什么方法可以阻止Visual Studio向您的web.config添加程序集。同样的问题也出现在我公司的解决方案中。

答案 10 :(得分:1)

您无法阻止Visual Studio将程序集添加到您的web.config。

答案 11 :(得分:0)

我不相信您可以阻止Visual Studio自动添加对其他人引用的程序集的引用。

一种解决方案是使用自动执行的自定义操作创建Web安装项目 从web.config删除这些不需要的程序集引用。

答案 12 :(得分:0)

这些是项目所需的所有程序集,在某种形状或庄园中,以及ASP.NET在运行时对页面执行的编译。它们可能是由您在项目中使用的代码或使用它们的其他库导入的。

但根据documentation。这些是您的全局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="*"引用。如果您阅读documentation关于此命令的信息,请说:

  

您可以选择指定   要添加的星号(*)通配符   私人中的每个集会   应用程序的程序集缓存,   它位于\ bin中   应用程序的子目录或   .NET Framework安装   目录   (%SYSTEMROOT%\ Microsoft.NET \框架\版本)。

这意味着/ bin目录或.NET Framework安装目录中的任何程序集都将包含在内。

这告诉我你的问题是那些被包含的程序集已经以某种方式引用到你的项目中。它们可能来自您页面上的Avatar Dot Net Library或某些控件。 检查“头像库”中Visual Studio项目中的“引用”文件夹,查找您不需要的这些引用。因为这是构建过程从中获取这些库的地方。

因此换句话说,如果您不希望它们被包含在内,请擦除这些库的所有引用的引用项目。

或者,每次运行构建过程时,您都可以使用MSBuild XML解析器删除web.config的该部分。我个人使用一个名为XmlUpdate的任务来修改我的web.config的某些部分,以使其生产就绪。如果您想这样做,它是MSBuild Community Tasks的一部分。

答案 13 :(得分:0)

如果您在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/

答案 14 :(得分:0)

请参阅http://msdn.microsoft.com/en-us/library/ms178728.aspx

在那里解释了你在属性页中看到的并不是全部,在Machine.config文件中也存在隐式引用,并在编译时添加。希望这会有所帮助。

答案 15 :(得分:-3)

首先,检查代码文件中的“using”语句以及.aspx,.ascx文件中的任何引用。听起来你已经引用了其中一些(我知道默认情况下会从Add New Item模板中添加一些。