EntityDeploySplit错误 - 缺少Microsoft.Data.Entity.Build.Tasks.dll

时间:2013-12-05 12:27:30

标签: entity-framework visual-studio-2013 entity-framework-6

在干净的Windows重新格式化并安装Visual Studio 2013之后,尝试使用数据库优先的Entity Framework edmx文件构建项目会产生以下错误:

  

无法从程序集加载“EntityDeploySplit”任务   C:\ Program Files   (86)\的MSBuild \ 12.0 \ BIN \ Microsoft.Data.Entity.Build.Tasks.dll。可以   不加载文件或程序集'file:/// C:\ Program Files   (x86)\ MSBuild \ 12.0 \ bin \ Microsoft.Data.Entity.Build.Tasks.dll'或者一个   它的依赖关系。该系统找不到指定的文件。   确认声明是否正确,即程序集   并且它的所有依赖项都可用,并且该任务包含一个   实现Microsoft.Build.Framework.ITask。

的公共类

有没有办法单独安装?默认包含哪个程序集?

更新:在查找EntityClean任务时,这也会显示出来。我倾向于认为它首先检查bin,因为另一个运行它的开发人员尝试了干净/重建然后开始出现。

4 个答案:

答案 0 :(得分:14)

我发现接受的答案有点令人困惑,下面是对我有用的步骤。

在记事本中打开C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Data.Entity.targets。

将UsingTask元素更改为:

  <UsingTask TaskName="EntityDeploySplit"
             AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />

  <UsingTask TaskName="EntityDeploy"
             AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />

  <UsingTask TaskName="EntityDeploySetLogicalNames"
             AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />

  <UsingTask TaskName="EntityClean"
             AssemblyFile="Microsoft.Data.Entity.Build.Tasks.dll" />

答案 1 :(得分:8)

我遇到了这个问题,并且能够解决它,如下所述。您的路径和变量可能不同。

我发现当我的项目构建时,它指向这个目标文件:

C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Data.Entity.targets

该目标文件似乎只是一个占位符。该文件中有一个Import元素,它指向运行位于该路径的目标文件的$(MSBuildFrameworkToolsPath)\Microsoft.Data.Entity.targets。我搜索了注册表,发现MSBuildFrameworkToolsPath是一个注册表项,其值为C:\Windows\Microsoft.NET\Framework\v4.0.30319\

我转到了引用的目标文件,并搜索了我的异常中指定的UsingTask元素。在UsingTask元素中,AssemblyFile属性指向$(MSBuildBinPath)\Microsoft.Data.Entity.Build.Tasks.dll。我搜索了注册表,发现MSBuildBinPath注册表项指向c:\Windows\Microsoft.NET\Framework\v3.5\

我不确定为什么会这样,可能是Framework或Visual Studio安装没有清理它。最后,我将所有UsingTask元素'AssemblyFile属性更改为:

$(MSBuildFrameworkToolsPath)\Microsoft.Data.Entity.Build.Tasks.dll

我使用了MSBuild Bin目标文件中的相同变量。

希望这有帮助。

答案 2 :(得分:1)

我对Andy Mahaffey的答案给予了很多赞誉,没有它,我就不会找到我所做的。 我跟着他的研究方向,但不喜欢只改变UsingTasks&#39;属性。我打开了&#34; C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Data.Entity.targets&#34;文件和我发现在打开Project元素之后它首先说的是这个评论:

  <!-- This .targets file can be used by updating Microsoft.Common.targets to 
         include the line below (as the last import element just before the end project tag)
      <Import Project="$(MSBuildBinPath)\Microsoft.Data.Entity.targets" Condition="Exists('$(MSBuildBinPath)\Microsoft.Data.Entity.targets')"/>
  -->

我遵循了它的建议和解决方案,解决了问题。

我希望这有帮助!

TLDR

将下面的行粘贴为以下文件中标记之前的最后一个元素。 C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ Microsoft.Common.targets

<Import Project="$(MSBuildBinPath)\Microsoft.Data.Entity.targets" Condition="Exists('$(MSBuildBinPath)\Microsoft.Data.Entity.targets')"/>

答案 3 :(得分:0)

在我的情况下,我不小心创建了我的一个.edmx文件的两个副本,一个在子文件夹中,我没有注意到它。一旦我删除了额外的一个,一切都很好。