在干净的Windows重新格式化并安装Visual Studio 2013之后,尝试使用数据库优先的Entity Framework edmx文件构建项目会产生以下错误:
无法从程序集C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Data.Entity.Build.Tasks.dll加载"EntityDeploySplit"任务.无法加载文件或程序集'file:/// C:\ Program Files(x86)\ MSBuild\12.0\bin\Microsoft.Data.Entity.Build.Tasks.dll'或其依赖项之一.该系统找不到指定的文件.确认声明是否正确,程序集及其所有依赖项是否可用,以及该任务是否包含实现Microsoft.Build.Framework.ITask的公共类.
有没有办法单独安装?默认情况下,此程序集包含什么内容?
更新:这在查找EntityClean任务时也会显示出来.我倾向于认为它首先检查bin,因为另一个运行它的开发人员尝试了干净/重建然后开始出现.
我发现接受的答案有点令人困惑,下面是对我有用的步骤.
在记事本中打开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" />
我遇到了这个问题,并且能够解决它,如下所述.您的路径和变量可能不同.
我发现当我的项目构建时,它指向这个目标文件:
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目标文件中的相同变量.
希望这可以帮助.