原生DotNet应用程序将在首次使用时加载所有引用的程序集(及其引用)。但是,ASP.NET将在首次访问时加载所有引用的程序集(及其引用)。
这种理解是否正确?
有没有办法强制ASP.NET按需加载程序集(如本地应用程序)?
我想解决的具体方案是:
答案 0 :(得分:25)
要回答第3点,可以在 C:\ winnt \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG文件中找到导致第一次访问时加载bin文件夹中所有程序集的设置。 \ web.config (取决于您的环境)。从该文件中删除摘录:
<system.web>
<compilation>
<assemblies>
<add assembly="*" />
</assemblies>
</compilation>
</system.web>
与通配符匹配的所有程序集都作为初始编译的一部分加载。
通过修改应用程序的web.config( NOT 全局DotNet)来包含Web服务程序集并排除通配符匹配,如果可选的依赖项是,则应用程序可以正常运行丢失:
<system.web>
<compilation>
<assemblies>
<remove assembly="*" />
<add assembly="Main.Application.WebService, Version=1.0.0.0, Culture=neutral, PublicKeyToken=YOURKEYHERE" />
</assemblies>
</compilation>
</system.web>
我们仍在尝试这一点,所以不确定这是否能完全解决问题或有任何不寻常的副作用。
答案 1 :(得分:3)
asp.net加载所需的所有程序集,因为工作进程创建了一个app域,其中包含每个实例的所有必需程序集。
如果您想按需加载程序集,请尝试以这种方式使用反射,您可以控制何时以及何时加载程序集。
**编辑:**
如果你没有对B和C的控制但是你说B需要C来运行,并且A有一个对B的硬引用对我来说听起来你需要ABC组件才能工作,你可以尝试删除来自A的B依赖使它成为松散的夫妻。
你可以使用反射来从A加载B但是B仍然需要C它仍会导致问题。
您的解决方案如何使用C组件进行编译?
是否存储在GAC中?