Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ASP.NET MVC应用程序中的非托管DLL导致IIS服务器上的应用程序池停止 我的ASP.NET MVC应用程序使用了一个用C++编写的非托管外部DLL。_C#_Asp.net_Asp.net Mvc_Dll - Fatal编程技术网

C# ASP.NET MVC应用程序中的非托管DLL导致IIS服务器上的应用程序池停止 我的ASP.NET MVC应用程序使用了一个用C++编写的非托管外部DLL。

C# ASP.NET MVC应用程序中的非托管DLL导致IIS服务器上的应用程序池停止 我的ASP.NET MVC应用程序使用了一个用C++编写的非托管外部DLL。,c#,asp.net,asp.net-mvc,dll,C#,Asp.net,Asp.net Mvc,Dll,此网站在Visual Studio中运行良好,可以正确定位和访问外部DLL。但是,如果在本地Web服务器(运行IIS 7.5)而不是Visual studio IIS Express上发布网站,则会出现以下错误: HTTP Error 503. The service is unavailable. 外部DLL位于网站的bin目录中。在查看IIS日志时,我注意到每次调用DLL时defaultapppool都会停止 HTTP/1.1 GET /Bio/Select/3 503 1 Disable

此网站在Visual Studio中运行良好,可以正确定位和访问外部DLL。但是,如果在本地Web服务器(运行IIS 7.5)而不是Visual studio IIS Express上发布网站,则会出现以下错误:

HTTP Error 503. The service is unavailable.
外部DLL位于网站的bin目录中。在查看IIS日志时,我注意到每次调用DLL时defaultapppool都会停止

HTTP/1.1 GET /Bio/Select/3 503 1 Disabled DefaultAppPool
我尝试了以下方法:

  • 我把DLL放在System32和syswow64文件夹中
  • 将ASPNET、IIS_WPG和IUSR(用于该服务器)的完整权限授予网站bin目录并重新启动
  • 将外部DLL作为现有项添加到项目中,并将其“复制到输出”属性设置为“始终复制”
  • 使用目标平台x86发布应用程序,因为dll为32位
  • 我在集成模式下运行IIS,启用32位
  • 我将dll放在\System32\Inetsrv目录中
  • 下面是我如何调用dll的代码片段

         [HttpGet]
        public ActionResult Select(int ID)
        {
            int res = BSSDK.BS_InitSDK();
            if (res != BSSDK.BS_SUCCESS)
            {
               ModelState.AddModelError("Error", "SDK failed to initialise");
            }
            return View()
         }
    
       public class BSSDK
    {
        [DllImport("BS_SDK.dll",
            CharSet = CharSet.Ansi,
            EntryPoint = "BS_InitSDK")]
        public static extern int BS_InitSDK();
     }
    
    我的看法

    @model IEnumerable<BasicSuprema.Models.BioUser>
    
    @using GridMvc.Html
    @{
        ViewBag.Title = "Bio Users On DB";
    }
    <div class="well well-sm"><h3>@ViewBag.Title</h3></div>
    @Html.ValidationMessage("Error")
    <div class="grid-wrap">
        @Html.Grid(Model).Named("UsersGrid").Columns(columns =>
                        {
                            columns.Add(c => c.BioUserID).Titled("ID");
                            columns.Add(c => c.UserName).Titled("User");
    
                        }).WithPaging(10).Sortable(true)
    
    </div>
    

    我重新卸载并安装了IIS,然后重复了问题中所述的所有步骤,最终成功了。

    为了找出应用程序在哪里搜索dll,我推荐Microsoft。它不仅将记录CLR搜索DLL的位置,还将记录有关加载失败原因的更多详细信息

    此外,查看进程是否实际打开dll的文件句柄可能会有所帮助。您可以通过Process Explorer了解: *下载并以管理员身份运行它。 *为“进程名称”添加筛选器并使用“w3wp.exe” *启动应用程序池
    *在process explorer中搜索“BS_SDK.dll”,您将看到它试图从哪个目录加载它。

    在服务器中,应用程序日志中应该包含更详细的错误。您能查看并发布详细信息吗?您是否在应用程序池中使用.net framework客户端配置文件???@Mitchellers您指的是哪些日志?您能告诉我应用程序日志的位置吗?@Mr。香港人 我应该在哪里检查它是否是客户端配置文件?我知道我已经将其设置为框架版本4?检查这里:您是否使用客户端配置文件.net framework??如果是这样,请尝试设置为非客户端配置文件。谢谢@chris会在我有时间的时候查看它。我确实使用了process explorer,但没有尝试fusionlog
    Unable to load DLL 'BS_SDK.dll': The specified module could not be found. (Exception from HRESULT: 0x8007007E)