entity-framework - para - entity framework tools for visual studio 2017
Error de EntityDeploySplit-Falta Microsoft.Data.Entity.Build.Tasks.dll (4)
Después de un reformateo limpio de Windows e instalación de Visual Studio 2013, intentar crear un proyecto con los primeros archivos de base de datos de Entity Framework edm produce el siguiente error:
La tarea "EntityDeploySplit" no se pudo cargar desde el ensamblado C: / Archivos de programa (x86) / MSBuild / 12.0 / bin / Microsoft.Data.Entity.Build.Tasks.dll. No se pudo cargar el archivo o ensamblado ''file: /// C: / Program Files (x86) / MSBuild / 12.0 / bin / Microsoft.Data.Entity.Build.Tasks.dll'' o una de sus dependencias. El sistema no puede encontrar el archivo especificado. Confirme que la declaración es correcta, que el ensamblado y todas sus dependencias están disponibles, y que la tarea contiene una clase pública que implementa Microsoft.Build.Framework.ITask.
¿Hay alguna forma de instalar esto por separado? ¿Con qué está incluido este conjunto por defecto?
ACTUALIZACIÓN: Esto también se manifiesta al buscar la tarea EntityClean. Me inclino a pensar que primero comprueba el bin, ya que otro desarrollador que lo estaba ejecutando bien intentó una limpieza / reconstrucción y luego esto comenzó a aparecer.
Me encontré con este problema y pude solucionarlo como he descrito a continuación. Tus caminos y variables pueden ser diferentes.
Descubrí que cuando mi proyecto se construye apunta a este archivo de destino:
C:/Program Files (x86)/MSBuild/12.0/Bin/Microsoft.Data.Entity.targets
Ese archivo de destino parece ser solo un marcador de posición. Hay un elemento de importación, en ese archivo, que apunta a $(MSBuildFrameworkToolsPath)/Microsoft.Data.Entity.targets
que ejecuta el archivo de destino ubicado en esa ruta. Busqué en el registro y encontré que MSBuildFrameworkToolsPath
es una entrada de registro con el valor de C:/Windows/Microsoft.NET/Framework/v4.0.30319/
Fui al archivo de objetivos al que se hizo referencia y UsingTask
elemento UsingTask
que se especificó en mi excepción. Dentro del elemento UsingTask
, el atributo AssemblyFile
apuntaba a $(MSBuildBinPath)/Microsoft.Data.Entity.Build.Tasks.dll
. Busqué en el registro y encontré que la entrada de registro MSBuildBinPath apuntaba a c:/Windows/Microsoft.NET/Framework/v3.5/
No estoy seguro de por qué se señaló eso, tal vez una instalación de Framework o Visual Studio no lo limpió. Finalmente, cambié todos los atributos de AssemblyFile
los elementos UsingTask
a:
$(MSBuildFrameworkToolsPath)/Microsoft.Data.Entity.Build.Tasks.dll
Usé la misma variable que estaba en el archivo de destino de MSBuild Bin.
Espero que esto ayude.
Encontré que la respuesta aceptada es un poco confusa, a continuación se detallan los pasos que funcionaron para mí.
Abra C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Microsoft.Data.Entity.targets en el bloc de notas.
Cambie los elementos de UsingTask a:
<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" />
En mi caso, accidentalmente había creado dos copias de uno de mis archivos .edmx, uno en una subcarpeta, donde no me di cuenta. Una vez que eliminé el extra, todo estaba bien.
Le doy mucho crédito a Andy Mahaffey por su respuesta, sin él no habría encontrado lo que hice. Seguí su línea de investigación, pero no me gustó la idea de simplemente cambiar los atributos de UsingTasks. Abrí el archivo "C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Microsoft.Data.Entity.targets" y encontré lo primero que dice después de que el elemento de apertura del proyecto es este comentario:
<!-- 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'')"/>
-->
Seguí su sugerencia y presto, problemas resueltos.
¡Espero que esto ayude!
TLDR
Pegue la línea siguiente como el último elemento antes de la etiqueta en el siguiente archivo. C: / Windows / Microsoft.NET / Framework / v4.0.30319 / Microsoft.Common.targets
<Import Project="$(MSBuildBinPath)/Microsoft.Data.Entity.targets" Condition="Exists(''$(MSBuildBinPath)/Microsoft.Data.Entity.targets'')"/>