2016-06-07 2 views
2

Я переношу приложение ASP.NET Core 1 с RC 1 на RC 2. Приложение имеет собственное веб-приложение (целевое приложение netcoreapp1.0) и две библиотеки классов (.NET Core) для моделей и уровень доступа к данным (нетто-стандарт1,5). Эти библиотеки классов используют драйвер MongoDB 2.2.4. Приложение восстанавливает зависимости и компилирует без каких-либо ошибок. Однако во время инициализации клиента MongoDB выбрано исключение FileNotFound.MongoDB драйвер бросает файл не найден Исключение

An exception of type 'System.IO.FileNotFoundException' occurred in MongoDB.Driver.dll but was not handled in user code 

Additional information: Could not load file or assembly 'System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' or one of its dependencies. The system cannot find the file specified. 

    at MongoDB.Driver.MongoUrlBuilder.Parse(String url) 
    at MongoDB.Driver.MongoUrl..ctor(String url) 
    at MongoDB.Driver.MongoClient..ctor(String connectionString) 
    at GS.Quest.DataAccess.Context..ctor() in 
CoreWebApp\src\DataAccess\Context.cs:line 9 

enter image description here

Что может вызвать эту проблему? Возможно ли использовать в настоящее время устаревший драйвер MongoDB для приложения ASP.NET Core RC 2, не дожидаясь драйвера для базовой версии .NET вообще? Кроме того, не было проблем с приложением ASP.NET Core RC 1.

Web App project.json

{ 
    "userSecretsId": "aspnet-CoreWebApp-6f0c9639-a671-45df-afcb-f126e55c6e3e", 

    "dependencies": { 
    "Microsoft.NETCore.App": { 
     "version": "1.0.0-rc2-3002702", 
     "type": "platform" 
    }, 
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "MongoDB.Driver": "2.2.4", 
    "Models": "1.0.0.*", 
    "DataAccess": "1.0.0.*" 
    }, 

    "tools": { 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    }, 
    "Microsoft.Extensions.SecretManager.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "frameworks": { 
    "netcoreapp1.0": { 
     "imports": [ 
     "dotnet5.6", 
     "dnxcore50", 
     "dnx451", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "gcServer": true 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 

Модели project.json

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.5.0-rc2-24027", 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1-rc2-24027", 
    "MongoDB.Driver": "2.2.4" 
    }, 

    "frameworks": { 
    "netstandard1.5": { 
     "imports": [ "dnxcore50", "dnx451" ] 
    } 
    } 
} 

DataAccess project.json

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "NETStandard.Library": "1.5.0-rc2-24027", 
    "Microsoft.NETCore.Portable.Compatibility": "1.0.1-rc2-24027", 
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final", 
    "MongoDB.Driver": "2.2.4", 
    "Models": "1.0.0-*" 
    }, 

    "frameworks": { 
    "netstandard1.5": { 
     "imports": [ "dnxcore50", "dnx451" ] 
    } 
    } 
} 

Во время миграции я следовал official documentation, а затем я попытался для переноса существующего исходного кода на образец веб-приложения ASP.NET Core 1 RC 2 созданный в Visual Studio 2015.

UPDATE

После переезда в net451 рамки файлы проекта выглядят следующим

Web App

{ 
    "userSecretsId": "aspnet-CoreWebApp-6f0c9639-a671-45df-afcb-f126e55c6e3e", 

    "dependencies": { 
    "Microsoft.ApplicationInsights.AspNetCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Authentication.Cookies": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Diagnostics": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Diagnostics.EntityFrameworkCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Identity.EntityFrameworkCore": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Mvc": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.Server.Kestrel": "1.0.0-rc2-final", 
    "Microsoft.AspNetCore.StaticFiles": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.SqlServer": "1.0.0-rc2-final", 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.Json": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Configuration.UserSecrets": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Console": "1.0.0-rc2-final", 
    "Microsoft.Extensions.Logging.Debug": "1.0.0-rc2-final", 
    "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-rc2-final", 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGenerators.Mvc": { 
     "version": "1.0.0-preview1-final", 
     "type": "build" 
    }, 
    "MongoDB.Driver": "2.2.4", 
    "Models": "1.0.0.*", 
    "DataAccess": "1.0.0.*" 
    }, 

    "tools": { 
    "Microsoft.AspNetCore.Razor.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.AspNetCore.Server.IISIntegration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.EntityFrameworkCore.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    }, 
    "Microsoft.Extensions.SecretManager.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": "portable-net45+win8+dnxcore50" 
    }, 
    "Microsoft.VisualStudio.Web.CodeGeneration.Tools": { 
     "version": "1.0.0-preview1-final", 
     "imports": [ 
     "portable-net45+win8+dnxcore50", 
     "portable-net45+win8" 
     ] 
    } 
    }, 

    "frameworks": { 
    "net451": { } 
    }, 

    "buildOptions": { 
    "emitEntryPoint": true, 
    "preserveCompilationContext": true 
    }, 

    "runtimeOptions": { 
    "gcServer": true 
    }, 

    "publishOptions": { 
    "include": [ 
     "wwwroot", 
     "Views", 
     "appsettings.json", 
     "web.config" 
    ] 
    }, 

    "scripts": { 
    "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ], 
    "postpublish": [ "dotnet publish-iis --publish-folder %publish:OutputPath% --framework %publish:FullTargetFramework%" ] 
    } 
} 

Модели

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "MongoDB.Driver": "2.2.4" 
    }, 

    "frameworks": { 
    "net451": { } 
    } 
} 

DataAcess

{ 
    "version": "1.0.0-*", 

    "dependencies": { 
    "Microsoft.Extensions.Logging": "1.0.0-rc2-final", 
    "Models": "1.0.0-*" 
    }, 

    "frameworks": { 
    "net451": { } 
    } 
} 

ответ

2

Вы не можете использовать таргетинг на водителей MongoDB в приложении netappcore1.0! И, пожалуйста, не используйте dnx451 в netappcore1.0. Сборки .NET 4.5.1 не работают с приложениями .NET Core! Только сборки .NET Core (win8 и win8.1/uwp основаны на .NET, dnx451 - не). В нем, по сути, говорится: «Установите MongoDb в .NET Core Application, даже если он не нацелен/не поддерживает его».

"netcoreapp1.0": { 
    "imports": [ 
    "dotnet5.6", 
    "dnxcore50", 
    "dnx451", 
    "portable-net45+win8" 
    ] 
} 

Это заставит NuGet восстановить dnx451/net451 пакеты, даже если они не поддерживаются. Раздел imports существует только в качестве обходного пути для принудительного восстановления пакетов, совместимых с ядром .NET, но пока не нацеленных на netstandard1.5 (например, пакеты, написанные для UWP, Win8 или Win8.1).

Для того, чтобы использовать драйверы MongoDB, вам необходимо установить таргетинг net451, а не netcoreapp1.0 или netstandard1.5. Это применимо ко всем вашим проектам и подпроектам, которые ссылаются на MongoDB.

+0

Благодарим вас за решение этой проблемы! –

+0

действительно ли в вашем ответе правильный способ сделать это или неверно? –

+0

@Son_of_Sam: Это отрывок из раздела «Веб-приложение project.json» из вопроса. Это неправильный способ сделать это. 'dnx451' не должен быть там, потому что dnx451 несовместим с netcoreapp1.0. Это только заставляет nuget устанавливать пакеты dnx451 в 'netcoreapp1.0', не более того. – Tseng

Смежные вопросы