在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
根据How to avoid loading unnessecary assemblies回答,这是由于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中的remove元素删除显示错误
并且在运行应用程序System.Data.OracleClient
后仍会出现在已加载程序集的列表中。
解决方案不包含对任何Oracle名称空间的任何直接引用。
如何从已加载的程序集中删除此amnd其他未使用的程序集。
应用程序在内存有限的VPS中运行,希望这可以释放一些内存。
答案 0 :(得分:2)
经过进一步调查后,我发现system.data.oracleclient
会调用此System.Data
并使用ILSpy
,如果您使用任何类型的数据库,这一点至关重要。
在使用mscorlib
进行更多调查之后,我还发现<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>
(核心库)也引用了该Oracle客户端...所以可能你根本无法避免它。 ..
因此,您需要删除此System.Data以避免使用oracle客户端 - 但如果您有任何类型的数据,它将无法播放。
从程序集中删除它,因为我也在这里发帖https://stackoverflow.com/a/40085122/159270
decimal num = 2.5M;
var result = Math.Round(num,0, MidpointRounding.AwayFromZero);
现在您在visual studio上看到的消息是否为虚警,因为visual studio无法将web.config编译为IIS ...实际上删除工作并运行该站点。
最后我喜欢说你,我不确定你可以从那个oracle客户端删除中获得多少,因为这只是检查web.config中是否有任何数据库连接,如果不存在实际上没有做任何事情
最重要的是最小化请求的管道线,因为我在之前的答案中输入了...