如何不加载未使用的程序集

How to not load unused assembly

在 ASP.NET MVC4 应用程序中 System.Data.OracleClient 程序集已加载。

控制器中的代码

   var sb = new StringBuilder();
   foreach (Assembly b in AppDomain.CurrentDomain.GetAssemblies())
        sb.AppendLine(b.FullName);

输出:

 System.Data.OracleClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089

根据 的回答,这是由于 machine.config 中存在 Oracle 部分引起的:

<section name="system.data.oracleclient" type="System.Data.Common.DbProviderConfigurationHandler, System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"/>

在应用程序中使用删除元素尝试删除 web.config 显示错误

和 运行 之后,应用程序 System.Data.OracleClient 仍然出现在加载的程序集列表中。 解决方案不包含对任何 Oracle 命名空间的任何直接引用。 如何从加载的程序集中删除这个和其他未使用的程序集。

应用程序 运行 在 VPS 中,内存有限,希望这可以释放一些内存。

经过进一步调查,我发现这个 system.data.oracleclientSystem.Data 调用和使用,如果您使用任何类型的数据库,这都是至关重要的。

在使用 ILSpy 进行更多调查后,我还发现 mscorlib(核心库)也引用了那个 Oracle 客户端......所以你可能无法避免它所有...

因此您需要删除此 System.Data 以避免 oracle 客户端 - 但如果您有任何类型的数据,它将无法播放。

从程序集中删除它,因为我这里也有 post

<compilation>
    <assemblies>
        <clear/>                
        <add assembly="Microsoft.VisualStudio.Web.PageInspector.Loader, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="mscorlib" />
        <add assembly="Microsoft.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <!-- 
        <add assembly="System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        -->
        <add assembly="System.Web.Services, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" />
        <add assembly="System.IdentityModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Runtime.Serialization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.ServiceModel.Activation, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.ServiceModel.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.ServiceModel.Activities, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.WorkflowServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Data.DataSetExtensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
        <add assembly="System.ComponentModel.DataAnnotations, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Web.DynamicData, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="System.Web.ApplicationServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add assembly="*" />
        <add assembly="System.Web.WebPages.Deployment, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
    </assemblies>           
</compilation>

现在您在 visual studio 上看到的消息是错误警报,因为 visual studio 无法将 web.config 编译为 IIS...实际上删除有效并且站点是 运行.

最后我想告诉你,我不确定你是否可以从删除的 oracle 客户端中获得很多,因为这只是检查 web.config 中是否有任何数据库连接,如果实际上不存在的话什么都不做。

最重要的是最小化请求的管道,因为我在之前的回答中输入了...