代码之家  ›  专栏  ›  技术社区  ›  codymanix

使用中的本机DLL时出现BadImageFormatExceptionASP.NET

  •  1
  • codymanix  · 技术社区  · 14 年前

    嗨,我是我的朋友ASP.NET应用托管的C++项目,它使用名为“本地DLL”的libmmd.dll". 如果我运行ASP.NET在visualstudio中,我得到一个BadImageFormatException,它告诉我“模块应该包含一个程序集清单”(从德语翻译过来)。

    将本机dll包含到asp.net项目?在哪个目录中搜索?在路径“C:\WINDOWS\微软.NET\框架\v2.0.50727\临时ASP.NET文件“似乎只有托管程序集,而不是本机DLL。

    [FileNotFoundException: Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)]
       System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +0
       System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark, Boolean throwOnFileNotFound, Boolean forIntrospection) +43
       System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +127
       System.Reflection.Assembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +142
       System.Reflection.Assembly.Load(String assemblyString) +28
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +46
    
    [ConfigurationErrorsException: Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)]
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +613
       System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +203
       System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +105
       System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +178
       System.Web.Compilation.BuildProvidersCompiler..ctor(VirtualPath configPath, Boolean supportLocalization, String outputAssemblyName) +54
       System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp) +227
       System.Web.Compilation.BuildManager.CompileGlobalAsax() +52
       System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +337
    
    [HttpException (0x80004005): Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)]
       System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +58
       System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +512
       System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters) +729
    
    [HttpException (0x80004005): Das angegebene Modul wurde nicht gefunden. (Ausnahme von HRESULT: 0x8007007E)]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +8890751
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +85
       System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +259
    
    2 回复  |  直到 14 年前
        1
  •  1
  •   Richard    14 年前


    附加:codymanix评论道:

    我的电脑是32位的,也都是DLL。当我将dll放入应用程序文件夹时,该库在windows窗体应用程序中工作。但是在ASP.NET我不知道在哪个文件夹中放置dll。

    让dll进入正确位置的最简单方法是让VS/ASP.NET通过以下方式之一:

    • 在项目引用中将“Copy Local”参数设置为true。
    • 将dll添加到项目的 bin 文件夹。

    我将从最后一个选项开始,但也要检查 Process Monitor 查看Windows试图从何处加载dll(即加载路径中包含哪些web应用文件夹)。本机程序集和托管程序集之间的交互可能有点困难(由于加载程序搜索规则不同),ASP.NET然后将其自身的差异添加到本机dll的某个程度上。

        2
  •  0
  •   codymanix    14 年前

    我没有将windows%PATH%变量设置为包含本机DLL的路径,现在它可以工作了。

    我还得重启我的机器才能运行。