原生DotNet应用程序将在首次使用时加载所有引用的程序集(及其引用).但是,ASP.NET将在首次访问时加载所有引用的程序集(及其引用).
这种理解是否正确?
有没有办法强制ASP.NET按需加载程序集(如本地应用程序)?
我想解决的具体方案是:
Iai*_*ain 26
要回答第3点,可以在文件C:\ winnt\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config中找到导致第一次访问时加载bin文件夹中所有程序集的设置(取决于在你的环境).从该文件中删除提取物:
<system.web>
<compilation>
<assemblies>
<add assembly="*" />
</assemblies>
</compilation>
</system.web>
Run Code Online (Sandbox Code Playgroud)
与通配符匹配的所有程序集都作为初始编译的一部分加载.
通过修改应用程序的web.config(不是全局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>
Run Code Online (Sandbox Code Playgroud)
我们还在试验这个,所以不确定这是否能完全解决问题或有任何不寻常的副作用.
asp.net 加载所需的所有程序集,因为工作进程会创建一个应用程序域,其中包含每个实例所需的所有程序集。
如果您想按需加载程序集,请尝试使用反射,这样您就可以控制加载程序集的时机和时间。
**编辑: **
如果您无法控制 B 和 C,但您说 B 需要 C 才能运行,并且 A 对 B 有硬引用。对我来说,听起来您需要 ABC 组件才能工作,您可以尝试从以下位置删除 B 依赖项: A 通过使其成为松散的情侣。
您可以使用反射从 A 加载 B,但是 B 仍然需要 C,它仍然会导致问题。
如果没有 C 组件,您的解决方案如何编译?
C存储在GAC中吗?