【问题标题】:Could not load file or assembly 'idrsnet15.dll' or one of its dependencies. The specified module could not be found无法加载文件或程序集“idrsnet15.dll”或其依赖项之一。指定的模块无法找到
【发布时间】:2014-12-04 05:27:15
【问题描述】:

我正在尝试使用这些配置在我的 Asp.net WebService 项目中添加第三方 C# dll 作为资源。

C# DLL 在 x64 环境中的 dotnet 框架 4 中构建,运行时版本 (4.0.30319)。
我们使用的是 VS 2010 框架版本 4.0.30319 RTMRel;在 ASP.Net webservice 项目配置下,我们将目标框架 4 设置为目标 x64 平台。

我需要将此 DLL 用于我的 Web 服务应用程序,但在通过 IIS 浏览它时出现运行时异常。

--------------错误详情------------------ -------------------------------------------------------

无法加载文件或程序集“idrsnet15.dll”或其其中之一 依赖关系。指定的模块无法找到。描述: 当前执行期间发生未处理的异常 网络请求。请查看堆栈跟踪以获取有关的更多信息 错误及其起源于代码的位置。

异常详细信息:System.IO.FileNotFoundException:无法加载 文件或程序集“idrsnet15.dll”或其依赖项之一。这 找不到指定的模块。

来源错误:

在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。

堆栈跟踪:

[FileNotFoundException: 无法加载文件或程序集 'idrsnet15.dll' 或其依赖项之一。指定的模块可以 找不到。]
System.Reflection.RuntimeAssembly._nLoad(AssemblyName 文件名,字符串 codeBase,证据 assemblySecurity,RuntimeAssembly locationHint, StackCrawlMark& stackMark,布尔 throwOnFileNotFound,布尔 forIntrospection, Boolean suppressSecurityChecks) +0
System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef,证据 assemblySecurity,StackCrawlMark 和 stackMark, Boolean for Introspection, Boolean suppressSecurityChecks) +567
System.Reflection.RuntimeAssembly.InternalLoad(字符串组装字符串, 证据组装Security, StackCrawlMark& stackMark, Boolean forIntrospection) +192 System.Reflection.Assembly.Load(String 组装字符串)+35
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 程序集名称,布尔星指令)+118

[ConfigurationErrorsException: 无法加载文件或程序集 'idrsnet15.dll' 或其依赖项之一。指定的模块可以 找不到。]
System.Web.Configuration.CompilationSection.LoadAssemblyHelper(字符串 assemblyName,布尔型 starDirective)+11392147
System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +484 System.Web.Configuration.AssemblyInfo.get_AssemblyInternal() +127 System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +334
System.Web.Compilation.BuildManager.CallPreStartInitMethods() +280
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, 异常 appDomainCreationException) +1087

[HttpException (0x80004005): 无法加载文件或程序集 'idrsnet15.dll' 或其依赖项之一。指定的模块可以 找不到。] System.Web.HttpRuntime.FirstRequestInit(HttpContext 上下文)+11524352
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext 上下文) +141 System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest WR,HttpContext 上下文)+4782309

版本信息:Microsoft .NET Framework 版本:4.0.30319; ASP.NET 版本:4.0.30319.1 ----------------------------------------错误详情-------- ------------------------------------------

我们通过选择 3.5 框架创建 Asp.net 项目,然后在应用程序配置下设置目标框架 4.0。

我可以在此路径下看到 TempAsp.net 文件,包括程序集和第三方 dll: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\myocrapp\f4fd840d\f71f8f0e\assembly\dl3\1a6aa3d5\00bb235d_957bcf01

【问题讨论】:

  • 请考虑将帖子名称更改为对用户更容易的名称,如How to Ask 部分所述。

标签: c# asp.net .net dll


【解决方案1】:

感谢 Ashok 的贡献。

我们通过使用 IDRS 非托管 dll(其他 IDRS 非托管 dll 所在的路径)的值配置“PATH”环境变量来解决此异常,因为当 IIS 部署应用程序时,它仅将托管 dll 部署到临时文件夹但剩余的非托管第三方 dll 仍需加载成功。

【讨论】:

  • 你在发布机器上设置了Path环境变量吗?我有本机 C++ dll(非托管),并且在发布时遇到同样的错误。是否必须发布 dll 才能让应用程序找到它们,或者您可以将它们上传到 bin 文件夹吗?
【解决方案2】:

根据我的理解,首先检查您是否正确包含了您的第三方 dll 引用(发布文件夹或虚拟目录中确实存在) 第二件事,您是否为 IIS 提供了足够的访问权限来访问您的第三方 dll,以便您可以将 IIS 虚拟目录设置为可以访问 IIS 用户帐户。

您也可以使用 Dependency Walker 来了解您的第三方 dll (http://dependencywalker.com/) 所需的依赖程序集,并且所有必需的文件都存在于您的系统中,还可以检查您的第三方 dll 的版本相关信息 (因为 X64 和 x86 不同,在某些情况下可能无法加载)。

【讨论】:

    猜你喜欢
    • 2018-03-01
    • 1970-01-01
    • 2018-10-26
    • 2023-03-15
    • 1970-01-01
    • 2011-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多