【问题标题】:ASP.NET 5 / Azure error: FileNotFoundException: Could not load file or assembly System.Data.SqlClientASP.NET 5 / Azure 错误:FileNotFoundException:无法加载文件或程序集 System.Data.SqlClient
【发布时间】:2015-11-26 21:50:26
【问题描述】:

我正在使用 VS2015 将 ASP.NET 5 应用程序部署到 Azure。成功部署并在浏览器中打开我的网站后,出现错误:

FileNotFoundException: Could not load file or assembly 'System.Data.SqlClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 我的项目中没有直接引用该程序集。它是通过 EntityFramework.MicrosoftSqlServer 程序集间接依赖的。

我在使用 ASP.NET 4 时遇到了类似的问题,这里解释了:Error: No Entity Framework provider found for the ADO.NET provider with invariant name 'System.Data.SqlClient' 当时,名为“可怕的黑客”的解决方案对我有用。 :)

您对可能导致问题的原因以及如何解决问题有任何想法吗?

这是我的网络应用 project.json 的内容:

{
    "userSecretsId": "aspnet5-MyProject.Web-<A guid goes here>",
    "version": "1.0.0-*",
    "compilationOptions": {
        "emitEntryPoint": true
    },

    "dependencies": {
        "EntityFramework.Commands": "7.0.0-rc1-final",
        "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
        "Microsoft.AspNet.Authentication.Cookies": "1.0.0-rc1-final",
        "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-rc1-final",
        "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
        "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
        "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
        "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
        "Microsoft.Extensions.CodeGenerators.Mvc": "1.0.0-rc1-final",
        "Microsoft.Extensions.Configuration.FileProviderExtensions": "1.0.0-rc1-final",
        "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
        "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging.Debug": "1.0.0-rc1-final",
        "Microsoft.Framework.CommandLineUtils.Sources": "1.0.0-beta5",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc1-final",
        "MyProject.Data": "1.0.0-*",
        "System.Data.SqlClient": "4.0.0-beta-23516" <-- I've tried with this explicit dependency here
     },

     "commands": {
        "web": "Microsoft.AspNet.Server.Kestrel",
        "ef": "EntityFramework.Commands"
     },

     "frameworks": {
         "dnxcore50": { }
     },

     "exclude": [
        "wwwroot",
        "node_modules"
     ],
     "publishExclude": [
         "**.user",
         "**.vspscc"
     ],
     "scripts": {
        "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
      }
}

以及MyProject.Web所依赖的MyProject.Data项目的project.json:

{
  "version": "1.0.0-*",
  "description": "MyProject.Data Class Library",
  "authors": [ "f012rt" ],
  "tags": [ "" ],
  "projectUrl": "",
  "licenseUrl": "",
  "frameworks": {
    "dnxcore50": {
      "dependencies": {
        "Microsoft.CSharp": "4.0.1-beta-23516",
        "System.Collections": "4.0.11-beta-23516",
        "System.Linq": "4.0.1-beta-23516",
        "System.Runtime": "4.0.21-beta-23516",
        "System.Threading": "4.0.11-beta-23516"
      }
    }
  },
  "commands": {
    "ef": "EntityFramework.Commands"
  },
  "dependencies": {
    "EntityFramework.Commands": "7.0.0-rc1-final",
    "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final",
    "EntityFramework.Core": "7.0.0-rc1-final",
    "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-rc1-final",
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
    "System.Runtime.Serialization.Primitives": "4.1.0-beta-23516",
    "System.Data.SqlClient": "4.0.0-beta-23516" <-- I've tried with this explicit dependency here
  }
}

我已尝试明确指定缺少的依赖项,正如您从我的 project.json 文件中看到的那样。我可以确认包 "System.Data.SqlClient": "4.0.0-beta-23516" 在我的 [approot]\packages 文件夹中。包文件夹在我的本地计算机上看起来与此完全相同。我已经尝试在新创建的 Web 应用程序上进行部署,以避免旧部署引起的任何事情。错误仍然相同。

【问题讨论】:

  • 这可能是最清晰的执行m
  • 你能把你的project.json文件的内容贴出来吗?

标签: azure asp.net-core entity-framework-core


【解决方案1】:

我认为您想将您的 System.Data.SqlClient 依赖项从 dependencies 中移出并移至 frameworks\dnxcore50\dependencies 中,如下所示:

"frameworks": {
    "dnx451": { },
    "dnxcore50": {
      "dependencies": {
        "System.Data.SqlClient": "4.0.0-beta-23516"
      }
     }
  }

【讨论】:

    【解决方案2】:

    这似乎是 dnx/dnu 问题,他们正在处理:https://github.com/aspnet/EntityFramework/issues/3637

    【讨论】:

    • 将我的 .net 运行时更改为版本 1.0.0-rc1-update1 为我解决了这个问题。
    【解决方案3】:

    我终于设法在 config.json 中使用 dependenciesframeworks 的这些行在 IIS 上进行部署

    "dependencies": {
        "Microsoft.NETCore.Platforms": "1.0.1-beta-23516",
        "Microsoft.NETCore.Targets.DNXCore": "5.0.0-beta-23516",
        "Microsoft.AspNet.Diagnostics": "1.0.0-rc1-final",
        "Microsoft.AspNet.Hosting": "1.0.0-rc1-final",
        "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",
        "Microsoft.AspNet.Mvc": "6.0.0-rc1-final",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-rc1-final",
        "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",
        "Microsoft.AspNet.Session": "1.0.0-rc1-final",
        "Microsoft.AspNet.StaticFiles": "1.0.0-rc1-final",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-rc1-final",
        "Microsoft.Extensions.Configuration.Json": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging": "1.0.0-rc1-final",
        "Microsoft.Extensions.Logging.Console": "1.0.0-rc1-final",
        "Microsoft.Extensions.PlatformAbstractions": "1.0.0-rc1-final",
        "System.Runtime.Serialization.Primitives": "4.1.0-beta-23516",
        "System.Data.Common": "4.0.1-beta-23516"
      },
      "frameworks": {
        "dnxcore50": {
          "dependencies": {
            "System.Data.SqlClient": "4.0.0-beta-23109",
            "System.Data.SqlClient.sni-x64": "4.0.0-beta-23019",
            "runtime.win7-x64.System.Data.SqlClient.sni": "4.0.0-beta-23516"
          } }
      }
    

    IIRC dependencies 中的重要行是 "Microsoft.NETCore.Platforms": "1.0.1-beta-23516""System.Data.Common": "4.0.1-beta-23516"。 以及来自frameworks 容器的所有内容。

    然后将已发布的目录 wwwroot、approot 和日志复制到您的 IIS 网站应该所在的位置。在 IIS 中将网站指向 wwwroot 目录。

    【讨论】:

      【解决方案4】:

      我遇到了在 Asp.net5 + MVC6 中遇到的同样问题。在不使用实体框架的情况下从数据库中检索数据时,我使用了System.Data.SqlClientSystem.Data.Common。还是有FileNotFoundException的错误。

      之后我从project.json 中删除了这些并下载了包:

      "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final"
      

      包含了所有Sql的基本库。所以这个问题就解决了。

      【讨论】:

        【解决方案5】:

        这里发生的情况是,它总是同时使用 mscorelib 和 System.Data.Sqlclient 并发生冲突。所以同时它将使用框架库。您可以有一个解决方案是从 project.json 文件中的 frameworks 选项中删除 dnxcore50。并从命令提示符恢复 dnu。

        【讨论】:

          【解决方案6】:

          在您的项目中,将 System.Data.SqlClient Local Copy 属性设置为 true 并尝试再次部署 Web 应用...

          web app 的 bin 中明显缺少 dll

          【讨论】:

          • 感谢您的回答。我没有参考“System.Data.SqlClient”。也许它被另一个组件引用(我不知道哪个也不知道如何找出)。我也找不到“本地副本”属性(在 ASP.NET 4 项目属性中)。我相信系统会自动管理依赖关系(如果在本地找不到,则尝试通过 nuget 源下载)。
          • 这是关于没有“复制本地”属性的 ASP.NET 5 项目。
          猜你喜欢
          • 2019-12-22
          • 1970-01-01
          • 2020-04-22
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多