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

时间:2013-11-12 04:25:30

标签: c# visual-studio-2013 asp.net-mvc-5 asp.net-mvc-scaffolding

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

  

错误
  运行所选代码生成器时出错:
  '进入路径
  '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。

25 个答案:

答案 0 :(得分:24)

  

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

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

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

对我有用的解决方案:

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

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

答案 1 :(得分:16)

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

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

问题是这些更新高度破坏了我的配置文件,其中包含大量更新工件,最终我清理完了。

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

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

  1. 可能是nuget包有缺陷
  2. TFS源代码控制阻止nuget正确更新各种依赖项。
  3. 从那时起,在应用任何更新之前,我会查看所有内容。但是,由于我有一段时间没有更新EF,我没有证据表明这已经解决了我的EF或脚手架问题。

答案 2 :(得分:12)

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

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

答案 3 :(得分:10)

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

解决方案:

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

答案 4 :(得分:9)

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

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

最终解决方案:

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

答案 5 :(得分:4)

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

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

答案 6 :(得分: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; }

答案 7 :(得分:2)

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

答案 8 :(得分:2)

以上都没有对我有帮助。

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

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

答案 9 :(得分:2)

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

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

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

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

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

答案 10 :(得分:1)

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

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

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

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

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

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

答案 11 :(得分:1)

这通常与Web.config

的格式有关

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

示例:我有connectionstring而不是connectionString

答案 12 :(得分:1)

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

答案 13 :(得分:1)

下面是我的图片错误,下面的步骤为我解决了问题。

  

运行所选代码生成器时发生错误:
  '无法升级项目的依赖项信息。请还原该项目,然后重试。'

步骤:

  1. 转到您的项目并将所有Nuget软件包更新为最新版本。
  2. 构建应用程序,直到构建成功为止。
  3. 关闭解决方案,然后重新打开。
  4. 并尝试添加控制器,类等文件。

希望这会有所帮助,谢谢

Click here to see error picture

答案 14 :(得分:0)

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

答案 15 :(得分:0)

就我而言,我试图搭建Identity元素,但以上方法均无效。解决方案就是简单地使用管理员权限打开Visual Studio。

答案 16 :(得分:0)

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

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

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

也许有点不同寻常 - 但它有效! (对我来说)

答案 17 :(得分: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名称)。

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

我希望这有助于其他用户。

答案 18 :(得分:0)

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

答案 19 :(得分:0)

  • vs2013 update 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>

答案 20 :(得分:0)

当我尝试在给定Area的顶级文件夹之外创建新的脚手架时发生这种情况。

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

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

  • AyArea(Add =&gt; new scaffold item)

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

答案 21 :(得分:0)

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

答案 22 :(得分:0)

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

答案 23 :(得分:0)

如果它帮助了任何人,我重命名了模型所在的命名空间,然后重新构建了项目,然后重新将其重新命名,然后重建,然后就可以了。

答案 24 :(得分:-1)

这可能是由于nuget软件包版本不同所致。通过转到解决方案中的dependencies-> nugetpackages文件夹,查看是否具有此功能。尝试安装所有它们的单个版本,并在如上所述清洁componentmodelcache文件夹后重新启动Visual Studio。这应该为您完成工作。