“在VS 2013脚手架中运行所选代码生成器时出错”

问题描述 投票:35回答:22

我正在创建一个模型的新视图。 我得到的错误信息是

错误 运行所选代码生成器时出错: '进入道路 'C:\ Users \ XXXXXXX \ AppData \ Local \ Temp \ SOMEGUID \ EntityFramework.dll'被拒绝'。

我以管理员身份运行VS 2013。

我看了Is MvcScaffolding compatible with VS 2013 RC by command line?,但这似乎没有解决问题。

VS2013 C#5 MVC5全新项目始于VS 2013。

c# visual-studio-2013 asp.net-mvc-5 asp.net-mvc-scaffolding
22个回答
24
投票

VS2013错误:运行所选代码生成器时出错:'已添加类型'SolutionName.Model.SalesOrder'的配置...'

我在使用Pluralsight课程“使用EF,MVC,Knockout,Ajax和验证的父子数据”时遇到了这个问题。我正在尝试使用带有视图的模板MVC 5 Controller添加一个新的Scaffolded Item,使用Entity Framework。

我正在使用的数据上下文类包括OnModelCreating方法的重写。需要覆盖以添加一些显式数据库列配置,其中EF默认值不足。这个覆盖很简单,有效,没有错误,但是(如上所述)它确实干扰了Controller脚手架代码生成。

对我有用的解决方案:

1 - 我删除(注释掉)我的OnModelCreating覆盖和脚手架模板完成而没有错误消息 - 我的控制器代码是按预期生成的。

2 - 然而,试图建立项目因为“模型已经改变”而窒息。由于我的控制器代码现已正确生成,我恢复(未注释)OnModelCreating覆盖,并且项目已构建并成功运行。


2
投票

对于我们来说,它与构建配置有关,我们有一个我们最近切换到使用的Debug | x64构建配置,回想起来当脚手架停止工作时。

(我怀疑至少有10种不同的东西可以导致这种情况,正如有些人发现为他们工作的各种答案所证明的那样 - 但这对其他人不起作用,所以我不建议我解决方案适用于所有人)。

什么对我们有用(在64位Windows 7上使用VS 2013 Express for Web):

它(脚手架)不在Debug | x64 Build配置中工作。但是做以下事情(似乎每一步都是必要的 - 无法弄清楚如何以更简化的方式做到这一点)似乎对我们有用。

  1. 首先,切换到Debug | x86 - 使用解决方案(右键单击)Configuration Manager来解决您解决方案中的所有项目。 (调试|任何CPU也可以工作)。
  2. 清洁你的解决方案
  3. 关闭Visual Studio。 (如果我跳过这个,就无法让它工作)。
  4. 打开Visual Studio。
  5. 打开你的解决方案
  6. 构建您的解决方案
  7. 现在尝试添加脚手架物品;对我们来说,它在这一点上起作用,我们不再收到错误消息,说“运行所选代码生成器时出错”。

如果您需要切换回脚手架不工作的构建配置,那么在您暂时搭建所需的所有内容之后,您可以这样做。在脚手架构建了我们需要的东西之后,我们切换回了Debug | x64。


1
投票

我在从不同项目引用模型时看到了一个新的MVC5项目的错误。检查路径,EntityFramework.dll确实存在。虽然它是只读的。进程监视器显示尝试删除该文件时出错。将我的packages文件夹中的EntityFramework.dll(存储在源代码管理中的副本)设置为可写可以解决此错误,但提出另一个说它无法加载EntityFramework程序集,因为它与引用的不匹配。我的模型类是在使用较旧版本的实体框架的不同项目中定义的。 MVC5项目引用了EF 6,而模型来自项目参考EF 4.4。在模型项目中升级到EF 6为我修复了它。


1
投票

尝试将Api控制器添加到我的MVC ASP.NET Web应用程序时出现此问题的原因完全不同于给出的其他答案。由于复制和粘贴操作,我不小心为一个整数属性包含了一个带有IndexAttribute声明的StringLength属性:

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

一旦我摆脱了IndexAttribute声明,我就可以为包含违规属性的模型添加Api控制器(NumTrainingPasses)。

为了帮助搜索引擎,这是我在修复问题之前收到的完整错误消息:

运行所选代码生成器时出错:

无法检索“Owner.Models.MainRecord”的元数据。该物业 'NumTrainingPasses'不是String或Byte数组。只能为String或Byte数组属性配置Length。


1
投票

这通常与Web.config的格式有关

在错误,选项卡消息下重建解决方案和查找。如果您对web.config有任何格式问题,您将在那里看到它。修复它,然后再试一次。

示例:我有connectionstring而不是connectionString


0
投票

如果它帮助任何人,我重命名模型所在的命名空间,然后重建项目,然后重新重命名,重建,然后它工作。


0
投票

重建解决方案对我有用。在重建之前,我发现我的'ApplicationDbContext'的引用号是零,这是不可能的,所以重建解决方案,现在一切正常。


0
投票

当我在一个单独的项目(我的数据访问层)中创建模型和上下文时,我经常遇到使用MVC5和EF的错误,我忘记将上下文连接字符串添加到MVC项目的Web.Config。


0
投票

我也遇到了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项目,粘贴在那里我的模型类(我使用流畅的api,所以它们上面几乎没有注释)并成功创建了我的控制器和视图。

之后,我将创建的类粘贴回原始项目并更正了一些错误(主要是dbset名称)。

它似乎工作,虽然我想我仍然会发现与类之间的关系有关的错误(由于创建时缺乏流畅的配置)。

我希望这对其他用户有帮助。


0
投票

当我试图在给定Area的顶级文件夹之外创建一个新的脚手架时,这发生在我身上。

  • 我的地盘 | - File.cs(试图在这里创建一个新的脚手架。失败。)

我只是重新选择了我的区域,问题就消失了:

  • AyArea(添加=>新脚手架项目)

请注意,在脚手架生成之后,您将被带到一个无法在不重新选择区域的情况下创建新脚手架的地方(至少在VS 2013中)。


0
投票
  • vs2013更新4
  • 如果5.0.0
  • ibm db2connector 10.5 fp 5

像这样更改web.config文件:从ef标记中删除了provider / s:

<entityFramework>
</entityFramework>

添加配置部分下的连接字符串标签:

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

16
投票

问题是web.config和包目录已损坏。

我创建了新项目,并将我的代码文件复制到新的工作项目中,之后我回过头来对配置文件运行差异,并在项目本身上运行文件夹差异。

问题是更新已经高度破坏了我的配置文件,其中包含许多更新工件,我最终清理完了。

第二个问题是旧的项目也一直挂在应该使用Nuget包的应用程序擦除的旧DLL上。所以我擦了obj和bin文件夹,然后是包文件夹。在那之后,我能够修复旧项目并干净地构建。

我没有调查为什么配置文件或包文件夹是如此borked,但我认为它是两件事之一。

  1. 可能nuget包有一个缺陷
  2. TFS源代码控制阻止nuget正确更新各种依赖项。

从那时起,在应用任何更新之前,我会查看所有内容。但是,由于我有一段时间没有更新EF,我没有证据表明这已经解决了我的EF或脚手架问题。


0
投票

在我的MVC应用程序EF引用属性(在“属性”窗口中)中,我遇到了同样的问题“特定版本”被标记为False,而在我的其他项目(包含DBContext和模型)中,从MVC应用程序引用了EF引用属性被标记为真正。当我把它标记为False时一切都很好。


0
投票

我知道我已经晚了,但实在是太令人沮丧所以我希望这可能有点帮助...

我的问题类似于此处的许多经验,尝试添加新视图或使用脚手架添加新控制器时的一般错误消息。 我发现mvc 5和ef 6 modelbuilder不是好朋友:

我的解决方案 1.在Context类中注释modelBuilder。 2.清洁解决方案,重建解决方案。 3.通过脚手架添加视图和控制器 4.取消注释模型构建器。

也许有点不同寻常 - 但它奏效了! (为了我)


0
投票

我在VS 2017中遇到过这个问题。我将平台目标(在项目属性> Build> General中)设置为“x64”。脚手架在将其更改为“任何CPU”后开始工作。


12
投票

我能够解决这个问题,并对发生的事情有了更好的了解。最好的部分是我能够重新创建问题并修复它以确保我的解释。解决方案是为数据访问层项目和Web项目安装完全相同版本的实体框架。

我的数据访问层使用NuGet安装了Entity Framework v6.0.2,Web项目没有安装Entity Framework。尝试使用实体框架模板创建Web API控制器时,实体框架会自动安装,但它是旧版本6.0.0之一。我很惊讶地看到安装了两个版本的Entity Framework,我的数据层项目更新,而我的Web项目更新。有一次,我删除了旧版本并在Web Project上安装了新版本,问题就消失了。


10
投票

我检查了所有项目,每个项目都有相同版本的Entity Framework。就我而言,问题是我的一个项目是针对.Net 4.0而其余的是.Net 4.5。

解:

  1. 对于解决方案项目中的每个项目 - >属性 - >应用程序:将目标框架设置为.Net 4.5(或您需要的任何内容)。
  2. 工具 - >管理NuGet包以获得解决方案。查找已安装的“实体框架”。然后单击“管理”取消选中所有项目(请注意需要EF的项目)。现在,重新管理EF并检查您需要的项目。
  3. 清洁和重建解决方案。

9
投票

我在我找到的每个网站上都尝试了每一个答案,没有任何效果......直到这个。如果像我这样的人出现并且拥有和我一样令人沮丧的经历,那么就会迟到。

我的问题类似于许多这里,当尝试使用脚手架尝试添加新控制器(ef6,webapi)时的一般错误消息。我最初能够为大约15个控制器使用脚手架,之后它就停止工作了一天。

结局解决方案:

  1. 打开硬盘上的工作文件夹以获得解决方案。
  2. 删除BIN文件夹中的所有内容
  3. 删除OBJ文件夹中的所有内容
  4. 清洁解决方案,重建解决方案,通过脚手架添加控制器

瞧! (为了我)


4
投票

这通常是由无效的Web.config文件引起的。我遇到了同样的问题,结果我无意中将HTML注释块<!-- -->更改为服务器端注释块@* *@(通过“全部替换”操作)。

如果您正在开发WinForms应用程序,请尝试查看App.config


4
投票

我有完全一样的问题。首先在沿着Pluralsight课程“使用EF,MVC,Knockout,Ajax和验证的父子数据”中遇到这个问题。

我正在使用MVC 5,EF 6.1.1和框架4.5.2。

即使在将我的VS2013更新为更新4后,此错误仍然存​​在。

能够通过将DbSet更改为DbContext类中的IDbSet来绕过这个烦人的问题。答案最初来自here

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

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

2
投票

解决这个问题对我有用:关闭解决方案,然后单击项目文件而不是解决方案文件打开项目,添加控制器,然后解雇你的叔叔


2
投票

以上都没有对我有帮助。

我发现我的问题的原因是在我的上下文类中覆盖了脚手架项所依赖的OnModelCreating。通过评论这个方法,然后脚手架工作。

我希望微软能够发布更少的错误代码。

© www.soinside.com 2019 - 2024. All rights reserved.