我在.NET 4.0中开发了一个WCF Rest Rest Service,它依赖于win32 dll(在不同的路径上)。 Win32 DLL与C ++ / CLI DLL静态链接,并使用spring.net进行依赖注入。
由于我是通过spring创建对象的,因此在IIS加载应用程序时会创建这些对象。如果win32 dll的路径不正确,IIS会发出无法加载C ++ / CLI dll或其某个依赖项的错误。
Exception type: ConfigurationErrorsException
Exception message: Could not load file or assembly 'Services.DLL' or one of its dependencies. The specified module could not be found.
at System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective)
at System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory()
at System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai)
at System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig)
at System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies()
at System.Web.Compilation.BuildManager.CallPreStartInitMethods()
at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
我尝试使用
设置IIS应用程序的路径Environment.SetEnvironmentVariable("PATH", "path_to_win32_dll;%PATH%", EnvironmentVariableTarget.Process)
Global.asax中的:Application_Start(对象发送者,EventArgs e),但由于应用程序本身没有加载,Application_Start没有被执行。
有没有什么办法可以在任何dll加载之前在IIS应用程序中获取事件,或者挂钩进入托管环境,这样我就可以在加载dll之前设置路径。 还有.Net 4.0中的任何缓存都是在加载dll时创建的吗?有没有办法清除它们?