我有一个应用程序,在这个应用程序中,我使用反射调用方法,这些方法是通过使用NetTiers生成的不同类。
为了做到这一点,我通过使用以下命令获取执行程序集来加载NetTiers服务程序集:
Assembly.GetExecutingAssembly().CodeBase并通过以下方式加载类:
Assembly.LoadFrom(<Assembly Path using above>.dll).GetType(<className>)这在某些情况下似乎有效,但有时加载程序集失败,但有以下例外情况:
从执行:C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\services\21d6c367\aa208bcd\assembly\dl3\e825b934\00f26fab_a39ecc01.dll类加载程序集时
错误:
和Stack Trace:
'file:///C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary System.IO.FileNotFoundException:无法加载文件或程序集、ASP.NET、System.IO.FileNotFoundException或其依赖项之一。系统找不到指定的文件。文件名:'file:///C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\services\21d6c367\aa208bcd\assembly\dl3\e825b934\00f26fab_a39ecc01.dll‘
在System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName,String codeBase,String,RuntimeAssembly locationHint,StackCrawlMark& stackMark,Boolean,Boolean,Boolean ) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,Evidence,StackCrawlMark& stackMark,Boolean,Boolean )
在System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile,Evidence,Byte[] hashValue,AssemblyHashAlgorithm hashAlgorithm,Boolean,Boolean,StackCrawlMark& stackMark)
在System.Reflection.Assembly.LoadFrom(String assemblyFile)
程序集绑定日志被关闭。若要启用程序集绑定故障日志记录,请将注册表值HKLM\Software\Microsoft\Fusion!EnableLog设置为1。注意:与程序集绑定失败日志记录相关的性能损失。若要关闭此功能,请删除注册表值HKLM\Software\Microsoft\聚变!EnableLog。
是否有更好的方法从程序集加载类,或者我是否遗漏了导致某些类发生此错误的东西,而其他类则没有?我正在使用IIS7运行应用程序。
发布于 2011-11-11 00:51:24
试着使用
Assembly.Load(Assembly.GetExecutingAssembly().GetName())加载程序集。
但是,我认为GetExecutingAssembly不一定是可靠的,因为JIT内联等等,原因与GetCallingAssembly相同。GetEntryAssembly可能更好一些--但在web应用程序中,它可能是另一个动态生成的程序集,这要归功于Global.asax --也就是说,它不一定直接包含任何代码。
实际上,如果您事先知道程序集的名称,那么您可以像上面这样使用Assembly.Load(AssemblyName)方法,而不必担心文件名(按文件名加载并不总是一个好主意--如果从与运行时加载的位置不同的地方加载,则可以在内存中获得重复的程序集。
发布于 2011-11-10 16:08:42
从给定的路径中可以看到,您没有为dll指定名称,请参阅\.dll
https://stackoverflow.com/questions/8073569
复制相似问题