2015-12-19 5 views
10

私は最初のASP.Net Webアプリケーションを開発しようとしています。私のソリューションでは2つのプロジェクトがあります。 A Web ApplicationおよびClass Library (Package)である。このアプリケーションのASP.Net 4.5バージョンをビルドすると、Entity Framework 6エンティティがクラスライブラリに格納されるため、ASP.Net 5バージョンでこれを実行しています。問題は、私はクラスライブラリにEntityFramework.Commandsをインストールするときに、私はエラーを取得する次のとおりです。ASP.Net 5のEntityFrameworkコマンドクラスライブラリパッケージ?

The dependency EntityFramework.Command 7.0.0-rc1-final in Project DBEntities does not support framework .NetPlatform, Version = 5.4

this SO questionからの私の理解では、dotnet5.4がEF7でサポートされていることになっている新しい.NET 5であるということです。ここで

は私project.jsonファイルです:

{ 
    "version": "1.0.0-*", 
    "description": "FFInfo.DAL Class Library", 
    "authors": [ "Mathew" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 
    "frameworks": { 
     "dotnet5.4": { 
      "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" 
      } 
     } 
    }, 
    "dependencies": { 
     "EntityFramework.Commands": "7.0.0-rc1-final", 
     "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 
    } 
} 

私は間違ったパッケージをインストールしました、EF7は私が間違ったクラスを構築していますか、私は私のJSONファイルで何かをしないのですそんなに変化していますか?

EDIT: 新しいproject.jsonファイルオフに基づいて提案

{ 
    "version": "1.0.0-*", 
    "description": "FFInfo.DAL Class Library", 
    "authors": [ "Mathew" ], 
    "tags": [ "" ], 
    "projectUrl": "", 
    "licenseUrl": "", 
    "frameworks": { 
     "dotnet5.4": { 
      "dependencies": { 
       "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*", 
       "Microsoft.Dnx.Runtime": "1.0.0-*", 
       "Microsoft.Extensions.CommandLineUtils.Sources": { 
        "version": "1.0.0-*", 
        "type": "build" 
       }, 
       "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*", 
       "System.Console": "4.0.0-*", 
       "System.IO.FileSystem": "4.0.1-*" 
      } 
     }, 
     "netcore50": { 
      "bin": { 
       "assembly": "lib\\netcore50\\_._" 
      } 
     }, 
     "dependencies": { 
      "EntityFramework.Commands": "7.0.0-rc1-final", 
      "EntityFramework.MicrosoftSqlServer": "7.0.0-rc1-final" 
     } 
    } 
} 
+0

フレームワーク 'dotnet5.4'は' dnxcore50'と同義であり、 'dnx451'ではありません([公式発表](https://github.com/aspnet/Announcements/issues/98)参照)。私は個人的に名前の変更が悪いことを見つける。 **最初に 'dotnet5.4'の名前を' dnxcore50'に変更することをお勧めします**おそらく 'frameworks 'の代わりに' net451'や 'dnx451'を使うべきでしょう" dotnet5.4 "。" dependencies " 'あなたのクラスライブラリがASP.Net 4.5のものであれば?どのようにしても、 '' dnx451 ':{} '(または' 'net451":{} ')を' 'フレームワーク''に追加することをお勧めします。あなたが問題を再現することができるなら、私はより多くを助けることを試みることができます。 – Oleg

+0

@Oleg「.Net 4.5」をターゲットにしたくありません。「.Net 5.0 core'をターゲットにします。この「クラスライブラリ」は、私のWebアプリケーションの「ASP.Net 5」バージョン用です。 – Matthew

+2

'' dotnet5.4 "'から '' dnxcore50 "' **に名前を変更することで、あなたの問題は解決できると思います。それがうまくいくなら私はより詳細な説明で私の答えを掲示するだろう。私はあなたが ''フレームワーク ''に含まれている ''依存関係 ''をすべて取り除くことができると思います。 "dotnet5.4" '(' "framework" "" dnxcore50 "')おそらく一般的な依存関係を使用します。本当に必要な依存関係のみです。 ''フレームワーク ''の最適化はあなたの主な問題とは独立しています。 – Oleg

答えて

15

私はあなたの問題の理由は、純粋な技術的な性質を持っていると仮定します。 The announcementは、dnx451からnet451への名前変更とdnxcore50からdotnet5.4への名前変更を宣言していますが、(他のユーザーと共有するためにNuGetで公開する)の名前変更のみを使用することをお勧めします。私が正しく理解したら、アプリケーションを開発しているので、dotnet5.4の代わりにdnxcore50を使用する必要があります。したがって文字列 "dotnet5.4"の名前を文字列"dnxcore50" in the file project.jsonに変更するだけで問題を解決する必要があります

なぜ、私はあなたの問題の私の理解を追加したい上記の勧告から独立したあなたはEntityFramework.Command 7.0.0-RC1-最終に関するエラーが発生します。

私は、フレームワークの名前を変更することは、Microsoftを計画している将来の変更の方向性としてのステップとして理解しています。反対に、フレームワークのすべての名前はちょうど異なる名前として解釈されます。ページhttps://www.nuget.org/packages/EntityFramework.Commands/7.0.0-rc1-finalに表示されている依存関係の情報と、https://www.nuget.org/packages/EntityFramework.MicrosoftSqlServer/7.0.0-rc1-finalの対応する情報を比較することをお勧めします。 (dotnet5.4の使用に問題がない)EntityFramework.MicrosoftSqlServerの依存関係は、私がdotnet5.4の責任の部分を読んでマークされた画像

enter image description here

のように見えます。

新しい名前dotnet5.4に対応しない」.NETPlatform 5.4" セクションが存在しない

enter image description here

:他の側にEntityFramework.Commandsの依存関係は、下図のように見えます。

私はそれがEntityFramework.Commandsproject.jsonthe partバグだと仮定:

"netcore50": { 
    "bin": { 
    "assembly": "lib\\netcore50\\_._" 
    } 
} 

私は1つが正しく新しいフレームワーク名dotnet5.4をサポートするために、ラインにdotnet5.4netcore50を変更する必要があるとします。おそらく1がイベント上で参照したDLLのいくつかのバージョン番号を増やす必要があり

"dotnet5.4": { 
    "dependencies": { 
    "Microsoft.AspNet.Hosting.Abstractions": "1.0.0-*", 
    "Microsoft.Dnx.Runtime": "1.0.0-*", 
    "Microsoft.Extensions.CommandLineUtils.Sources": { 
     "version": "1.0.0-*", 
     "type": "build" 
    }, 
    "Microsoft.Extensions.PlatformAbstractions": "1.0.0-*", 
    "System.Console": "4.0.0-*", 
    "System.IO.FileSystem": "4.0.1-*" 
    } 
} 

、あなたはまだ"dotnet5.4"EntityFramework.Commandsを使用することはできませんようになります。一つは、(the linesを参照)dnxcore50からコピーに"netcore50"の内容を置き換えるchould新しい固定版が公開されるまで。 UPDATED

私はEntityFrameworkの開発チームにthe issueを提起しました。私がそれを手に入れたら、Microsoftからの返答をこの問題に含めるつもりです。

+0

しかし、 'EntityFramework.Commands'はクラスライブラリではなく、その[アプリケーション](https://github.com/aspnet/EntityFramework/blob/dev/src/EntityFramework.Commands/Commands/Program.cs)です... –

+0

@StaffordWilliams:現在、用語にはいくつかの違いがあると思います。私にとってDLLはアプリケーションではありません。 "EntityFramework.Commands"の分類とは別に、[project.json](https://github.com/aspnet/EntityFramework/blob/)の '' frameworks''として '' dotnet5.4 "'でコンパイルする必要がありますdev/src/EntityFramework.Commands/project.json#L19)を使用してアプリケーションを使用することを許可したい場合は、 'dotnet5.4'のためにコンパイルしてください。 EntityFrameworkを使用するプロジェクトで問題を再現することができます。 'dnxcore50'の名前を' dotnet5.4'に変更するとエラーになります。 – Oleg

+0

リンクした嘘をコピーしようとしましたが、今は 'dependecny Microsoft.Extensions.CommandLineUtils.Sources> = 1.0.0- *を解決できませんでした。 'Microsoft.Dnx.Runtime'の場合と同じエラーですので、置き換えても解決しないと思います。 – Matthew