Sto distribuendo l'applicazione ASP.NET 5 in Azure utilizzando VS2015. Dopo aver correttamente distribuito e aperto il mio sito nel browser, ricevo l'errore:
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.
L'assembly non è referenziato direttamente nel mio progetto. È una dipendenza indiretta tramite l'assembly EntityFramework.MicrosoftSqlServer.
Ho riscontrato un problema simile utilizzando ASP.NET 4 spiegato qui: Errore: Nessun provider di Entity Framework trovato per il provider ADO.NET con nome invariante "System.Data.SqlClient" La soluzione denominata "the terrible hack" ha funzionato per me allora. :)
Avete qualche idea su cosa potrebbe causare il problema e su come risolverlo?
Ecco il contenuto della mia app web 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" ]
}
}
e project.json del progetto MyProject.Data che MyProject.Web dipende da:
{
"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
}
}
Ho provato a specificare esplicitamente la dipendenza mancante come puoi vedere dai miei file project.json. Posso confermare che il pacchetto "System.Data.SqlClient": "4.0.0-beta-23516" è nella mia cartella [approot] \ packages. La cartella del pacchetto appare esattamente come questa sul mio computer locale. Ho provato la distribuzione su un'app Web appena creata per evitare qualsiasi problema causato da vecchie versioni. L'errore è sempre lo stesso.
Sono finalmente riuscito a ottenere una distribuzione che funziona su IIS utilizzando queste linee per dependencies
e frameworks
in config.json
"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 le linee importanti nelle dependencies
sono "Microsoft.NETCore.Platforms": "1.0.1-beta-23516"
e "System.Data.Common": "4.0.1-beta-23516"
. E tutto dal contenitore delle frameworks
.
Quindi copiare le directory pubblicate wwwroot, approot e registri nel percorso in cui dovrebbero trovarsi i siti Web IIS. In IIS, indirizzare il sito Web alla directory wwwroot.