web-dev-qa-db-ja.com

VS 2013のスキャフォールディングで「選択したコードジェネレーターの実行中にエラーが発生しました」

モデルから新しいビューを作成しています。
エラーメッセージは

エラー
選択したコードジェネレーターの実行中にエラーが発生しました:
'パスへのアクセス
'C:\ Users\XXXXXXX\AppData\Local\Temp\SOMEGUID\EntityFramework.dll'は拒否されました '。

管理者としてVS 2013を実行しています。

MvcScaffoldingはコマンドラインでVS 2013 RCと互換性がありますか? を見ましたが、これで問題は解決しなかったようです。

VS2013 C#5 MVC5真新しいプロジェクトがVS 2013で開始されました。

36
Brian

問題は、破損したweb.configおよびパッケージディレクトリにありました。

新しいプロジェクトを作成し、コードファイルを新しい作業プロジェクトにコピーしました。後で戻って、構成ファイルの差分とプロジェクト自体のフォルダー差分を実行しました。

問題は、更新によって大量の更新アーティファクトが構成ファイルに大量に入れられ、最終的に消去されてしまうことでした。

2番目の問題は、古いプロジェクトが、Nugetパッケージのアプリケーションでワイプされるはずの古いDLLにもハングアップし続けることでした。そのため、objフォルダーとbinフォルダーを消去してから、パッケージフォルダーを消去しました。それが終わった後、私は古いプロジェクトを修復し、きれいに構築することができました。

構成ファイルまたはパッケージフォルダーが非常に壊れている理由については調べていませんが、2つの理由の1つであると考えています。

  1. おそらく、nugetパッケージに欠陥がある
  2. TFSソース管理は、nugetがさまざまな依存関係を適切に更新することをブロックしました。

それ以来、アップデートを適用する前に、すべてをチェックアウトします。ただし、EFをしばらく更新していないので、これによりEFまたは足場の問題が解決したという証拠はありません。

16
Brian

VS2013エラー:選択したコードジェネレーターの実行中にエラーが発生しました: 'タイプ' SolutionName.Model.SalesOrder 'の構成は既に追加されています...'

Pluralsightコース「EF、MVC、Knockout、Ajax、およびValidationを使用した親子データ」の作業中にこの問題が発生しました。テンプレートを使用して新しい足場アイテムを追加しようとしていましたエンティティフレームワークを使用したビュー付きMVC 5コントローラー

私が使用していたData Contextクラスには、OnModelCreatingメソッドのオーバーライドが含まれています。 EFのデフォルトが適切でないいくつかの明示的なデータベース列構成を追加するには、オーバーライドが必要でした。このオーバーライドは単純で、機能し、バグはありませんでしたが、(上記のように)Controller scaffoldingコード生成を妨害しました。

私のために働いたソリューション:

1-OnModelCreatingオーバーライドを削除(コメントアウト)し、エラーメッセージなしで完了したscaffoldingテンプレート-コントローラーコードは期待どおりに生成されました。

2-ただし、「モデルが変更された」ため、プロジェクトをビルドしようとすると窒息します。コントローラーコードが適切に生成されたため、OnModelCreatingオーバーライドを復元(コメント解除)し、プロジェクトをビルドして正常に実行しました。

24
Bill B

私はこの問題を解決することができ、何が起こっているかを少しよく理解することができました。最良の部分は、問題を再現し、ここで説明を確実にするために修正できることです。 解決策は、データアクセスレイヤープロジェクトとWebプロジェクトの両方にまったく同じバージョンのEntity Frameworkをインストールすることでした。

データアクセスレイヤーには、NuGetを使用してEntity Framework v6.0.2がインストールされていましたが、WebプロジェクトにはEntity Frameworkがインストールされていませんでした。 Entity Frameworkテンプレートを使用してWeb API Controllerを作成しようとすると、Entity Frameworkは自動的にインストールされますが、古いバージョン6.0.0の1つです。 Entity Frameworkの2つのバージョンがインストールされていることに驚きました。新しいデータレイヤープロジェクトとWebプロジェクトの古いバージョンです。一度、古いバージョンを削除し、新しいバージョンをWeb Projectにインストールすると、問題はなくなりました。

12
isingh

私はすべてのプロジェクトをチェックし、それぞれに同じバージョンのEntity Frameworkがありました。私の場合、問題は私のプロジェクトの1つは.Net 4.0をターゲットとしており、残りは.Net 4.5でしたでした。

解決:

  1. ソリューションの各プロジェクトプロジェクト->プロパティ->アプリケーション:ターゲットフレームワークを.Net 4.5(または必要なもの)に設定します。
  2. ツール->ソリューションのNuGetパッケージの管理。インストール済みの「Entity Framework」を見つけます。そして、管理をクリックします。すべてのプロジェクトのチェックを外します(EFを必要とするプロジェクトに注意してください)。次に、EFを再管理し、必要なプロジェクトを確認します。
  3. ソリューションのクリーンと再構築。
10
RitchieD

私が見つけたすべてのウェブサイトですべての答えを試しましたが、これまでは何も機能しませんでした。私のような人が来て、私が持っているのと同じイライラする経験がある場合に備えて、遅く投稿してください。

私の問題は、多くの場合、scaffoldingを使用して新しいコントローラー(ef6、webapi)を追加しようとするときの一般的なエラーメッセージに似ていました。当初は約15台のコントローラーに足場を使用することができましたが、その後1日だけ動作しなくなりました。

最終的な解決策:

  1. ソリューションのハードドライブ上の作業フォルダーを開きます。
  2. BINフォルダー内のすべてを削除する
  3. OBJフォルダー内のすべてを削除します
  4. ソリューションのクリーン、ソリューションの再構築、足場によるコントローラーの追加

出来上がり! (私のために)

9
erikrunia

これは通常、無効なWeb.configファイルが原因です。私は同じ問題を抱えていたため、HTMLコメントブロック<!-- -->をサーバー側のコメントブロック@* *@に誤って変更しました([すべて置換]アクションを使用)。

また、WinFormsアプリケーションを開発している場合は、App.configを確認してください。

4

私はまったく同じ問題を抱えています。 Pluralsightコース「EF、MVC、Knockout、Ajax、およびValidationを使用した親子データ」に沿って進むと、最初にこれに遭遇しました。

MVC 5、EF 6.1.1、およびフレームワーク4.5.2を使用しています。

VS2013をアップデート4にアップデートした後でも、このエラーは続きました。

DbContextクラス内でDbSetをIDbSetに変更することにより、この厄介な問題を回避することができました。元々 here からの回答でした。

//From
public DbSet SalesOrders { get; set; }

//To
public IDbSet SalesOrders { get; set; }
4
scyu

これを解決するために働いたのは、ソリューションを閉じて、ソリューションファイルではなくプロジェクトファイルをクリックしてプロジェクトを開き、コントローラーを追加して、叔父をボブします

3

上記のどれも私を助けてくれませんでした。

私の問題の原因は、scaffoldアイテムが依存していたコンテキストクラスでOnModelCreatingをオーバーライドしていることがわかりました。このメソッドをコメントアウトすることにより、足場が機能します。

Microsoftがバグの少ないコードをリリースすることを願っています。

3
Jim Taliadoros

別のプロジェクトのモデルを参照するときに、新しいMVC5プロジェクトでこのエラーが発生しました。パスを確認すると、EntityFramework.dllが存在していました。ただし、読み取り専用でした。プロセスモニターは、ファイルを削除しようとしてエラーが発生したことを示しました。パッケージフォルダー(ソース管理に保存されているコピー)のEntityFramework.dllを書き込み可能に設定すると、このエラーが発生しましたが、参照されているものと一致しないためEntityFrameworkアセンブリを読み込めないという別のエラーが発生しました。私のモデルクラスは、以前のバージョンのエンティティフレームワークを使用していた別のプロジェクトで定義されていました。 MVC5プロジェクトはEF 6を参照していましたが、モデルはEF 4.4を参照するプロジェクトのものでした。モデルのプロジェクトでEF 6にアップグレードすると、修正されました。

2
Lindsey

私たちにとっては、ビルド構成と関係があり、最近使用したDebug | x64ビルド構成があります。これは、振り返ってみると、足場が機能しなくなったときのようです。

(これを引き起こす可能性のある少なくとも10の異なるものがあると思われます。SO他の人のため、私のソリューションがすべての人に有効であることを提案していません)。

私たちにとってうまくいったこと(64ビットWindows 7でVS 2013 Express for Webを使用):

それ(足場)は[〜#〜] not [〜#〜] Debug | x64 Build configurationで動作していました。しかし、以下を実行すること(すべてのステップが必要なようです-より合理化された方法でそれを行う方法を理解できませんでした)は、私たちにとってはうまくいくようです。

  1. まず、Debug | x86に切り替えます。ソリューション内のすべてのプロジェクトにソリューション(右クリック)構成マネージャーを使用します。 (デバッグ|任意のCPUも動作します)。
  2. ソリューションをきれいにします。
  3. Visual Studioをシャットダウンします。 (これをスキップすると動作しません)。
  4. Visual Studioを開きます。
  5. ソリューションを開きます。
  6. ソリューションを構築します。
  7. 足場アイテムを追加してみてください。私たちにとっては、この時点で機能しました。「選択したコードジェネレーターの実行中にエラーが発生しました」というエラーメッセージは表示されなくなりました。

Scaffolding-non-workingビルド構成に戻す必要がある場合は、現時点で必要なものをすべて足場にした後、それを行うことができます。必要なものをスキャフォールディングした後、Debug | x64に切り替えました。

2
DWright

以下は私の写真のエラーで、以下の手順は私にとって問題を解決しました。

選択したコードジェネレーターの実行中にエラーが発生しました:
'プロジェクトの依存関係情報をアップグレードできませんでした。プロジェクトを復元して、もう一度試してください。

手順:

  1. プロジェクトに移動して、すべてのNugetパッケージを最新バージョンに更新します。
  2. ビルドが成功するまでアプリケーションをビルドします。
  3. ソリューションを閉じて、再度開きます。
  4. そして、コントローラ、クラスなどのようなファイルを追加してみてください.

これがお役に立てば幸いです、ありがとう

エラー画像を見るにはここをクリック

1
Manjunath K

これは通常、Web.configの形式に関連しています

ソリューションを再構築し、[エラー]タブの[メッセージ]で検索します。 web.configでフォーマットの問題がある場合は、そこに表示されます。それを修正して再試行してください。

例:connectionstringの代わりにconnectionStringがありました

1
Marko

Api ControllerをMVC ASP.NET Webアプリに追加しようとしたときに、他の回答とはまったく異なる理由でこの問題が発生しました。コピーアンドペースト操作のため、誤って整数プロパティのStringLength属性をIndexAttribute宣言に含めていました。

[Index]
[IndexAttribute("NumTrainingPasses", 0), StringLength(50)]
public int NumTrainingPasses { get; set; }

IndexAttribute宣言を削除したら、問題のプロパティ(NumTrainingPasses)を含むモデルのApiコントローラーを追加できました。

検索エンジンを支援するために、問題を修正する前に表示された完全なエラーメッセージを以下に示します。

選択したコードジェネレーターの実行中にエラーが発生しました:

「Owner.Models.MainRecord」のメタデータを取得できません。プロパティ
'NumTrainingPasses'は文字列またはバイト配列ではありません。長さは、文字列またはバイト配列プロパティに対してのみ構成できます。

1
Robert Oschler

これは、特定の Area に対して最上位フォルダーの外に新しい足場を作成しようとしたときに起こりました。

  • 私のエリア
    | -File.cs(ここで新しい足場を作成しようとしました。失敗。)

私は単に自分のエリアを再選択し、問題はなくなりました。

  • AyArea(追加=>新しい足場アイテム)

足場の生成後、最初に領域を再選択しないと新しい足場を作成できない場所に移動することに注意してください(少なくともVS 2013では)。

0
P.Brian.Mackey

また、MSVS2013 Update 4およびEF 6.0でこの問題が発生しています。

    there was an error running the selected code generator.
A configuration for type XXXX has already been added ...[]

約10クラスのモデルがあります。プロジェクトの最初に問題なく要素を足場にしました。

数日機能を追加した後、モデルから別のクラスを作成しようとしましたが、エラーが原因で実行できませんでした。

私はMSVSをアップデート2からアップデート4にアップデートしようとしましたが、私のOnModelCreatingメソッドと他のアイデアは運良くコメントアウトされています。

プロジェクトを継続する一時的な方法として、別のasp.netプロジェクトを作成し、そこにモデルクラスを貼り付け(Fluent APIを使用しているため、アノテーションはほとんどありません)、コントローラーとビューを正常に作成しました。

その後、作成したクラスを元のプロジェクトに貼り付けて、いくつかの間違い(主にdbset名)を修正しました。

動作しているように見えますが、クラス間の関係に関連する間違いを見つけることはまだあると思います(作成時に流れるような設定がないため)。

これが他のユーザーに役立つことを願っています。

0
user1839387

私は遅れていることを知っていますが、それはとてもイライラしていたので、これが少し役立つかもしれません...

私の問題は、ここでの多くの経験、新しいビューを追加しようとしたとき、または足場を使用して新しいコントローラーを追加しようとしたときの一般的なエラーメッセージに似ていました。
mvc 5とef 6のモデルビルダーは良い友達ではないことがわかりました。

私のソリューション:
1。ContextクラスでmodelBuilderをコメントアウトします。
2。ソリューションのクリーン、ソリューションの再構築。
3。スキャフォールディングを介してビューとコントローラーを追加します
4。モデルビルダーのコメントを解除します。

たぶん少し型にはまらない-しかしそれは働いた! (私のために)

0
freddy

ソリューションを再構築するとうまくいきます。再構築する前に、「ApplicationDbContext」の参照番号がゼロであることがわかりました。これは不可能です。そのため、ソリューションを再構築してください。

0
simon9k

別のプロジェクト(データアクセスレイヤー)でモデルとコンテキストを作成すると、MVC5とEFでこのエラーが頻繁に発生し、MVCプロジェクトのWeb.Configにコンテキスト接続文字列を追加するのを忘れます。

0
John S

この問題はVS 2017で発生しました。プラットフォームターゲット(プロジェクトプロパティ>ビルド>全般)が「x64」に設定されていました。 「任意のCPU」に変更した後、足場は機能し始めました。

0
billw

それが誰かを助ける場合、モデルが存在する名前空間の名前を変更し、プロジェクトを再構築し、再び名前を変更して再構築し、それが機能しました。

0
Adam Marshall

MVCアプリのEF参照プロパティ([プロパティ]ウィンドウ)で[特定のバージョン]がFalseとしてマークされ、他のプロジェクト(DBContextおよびモデルを含む)でEF参照プロパティがマークされたMVCアプリから参照されたときに同じ問題が発生しました本当です。 Falseとマークしたとき、すべてが正常でした。

0
Iwona Kubowicz
  • vs2013アップデート4
  • ef 5.0.0
  • iBM db2connector 10.5 fp 5

web.configファイルを次のように変更します。efタグからプロバイダーを削除します。

<entityFramework>
</entityFramework>

構成セクションの下に接続文字列タグを追加しました。

</configSections>
<connectionStrings>
<add name=".." connectionString="..." providerName="System.Data.EntityClient" />
</connectionStrings>
0
gummylick