您好我在我的ASP.NET应用程序中引用了一个托管C ++项目,该项目使用名为“libmmd.dll”的本机DLL。如果我用visual studio运行ASP.NET应用程序,我会得到一个BadImageFormatException,它告诉我“模块应该包含一个程序集清单”(翻译自德语)。
将原生dll包含到asp.net项目中的首选方法是什么?在哪个目录中搜索?在路径“C:\ WINDOWS \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files”中,似乎只有托管程序集,而不是本机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
答案 0 :(得分:1)
确保ASP.NET应用程序的位数(由IIS应用程序池设置)与本机dll的位数相匹配。例如。 32位进程无法加载64位dll。
补充:codymanix评论说:
我的电脑是32位,也都是Dlls。当我将dll放在应用程序文件夹中时,该库在Windows窗体应用程序中工作。但在ASP.NET中我不知道在哪个文件夹中放置dll。
让dll进入正确位置的最简单方法是让VS / ASP.NET通过以下方式执行:
bin
文件夹中的项目中。 我会从最后一个选项开始,但也请查看Process Monitor以查看Windows尝试加载dll的位置(即加载路径中包含哪些Web应用程序文件夹)。本机和托管程序集之间的交互可能有点困难(由于不同的加载器搜索规则),然后ASP.NET会添加自己的差异,这些差异适用于本机dll的程度。
答案 1 :(得分:0)
我没有设置windows%PATH%-variable来包含我的本机DLL的路径,现在它可以正常工作。
我还必须重启我的机器才能让它运行。