visual-studio-2013 - instalar - visual studio core
El controlador de andamios no funciona con Visual Studio 2013 actualizaciĆ³n 2 (16)
Creo que el problema se debe a una mala configuración en el archivo web.config.
En mi caso, tuve varias secciones de <entityFramework>
en web.config, y el problema se resolvió después de haber cambiado las configuraciones.
PROBLEMA:
Actualicé a Visual Studio 2013 actualización 2 y ahora no puedo andamiar controladores.
El problema no es específico del proyecto: cuando intento andamiar un controlador, aparece el siguiente error en TODOS y EN CUALQUIER proyecto:
There was an error running the selected code generator:
''Exception has been thrown by the target of an invocation.''
Estaba funcionando antes de actualizar a Visual Studio 2013 actualización 2.
Ha buscado en Google el problema hasta la muerte, pero ninguna de las varias sugerencias funciona
P.ej:
Comentando OnModelCreating en mi contexto;
Eliminar paquetes como MvcScaffolding, etc. (no tengo ninguno instalado y no funciona con NINGÚN proyecto);
He modificado / personalizado algunas de las plantillas, pero estaba funcionando después de los cambios.
EDITAR:
Desinstalé Visual Studio 2013 Update 2 y, por lo tanto, volví a Visual Studio versión 12.0.21005.1 REL.
El problema ha desaparecido Por lo tanto, el problema es definitivamente con la Actualización 2.
PREGUNTA:
¿Alguien (incluido Microsoft) sabe de una solución?
EDICION 2:
La respuesta de Farruk Subhani no aborda la pregunta: la pregunta establece claramente que eliminar las referencias a MVCScaffolding no resuelve el problema.
He agregado una recompensa de 200 puntos, por favor dirija la pregunta como se establece claramente.
Dirijo el VS 2015RC el último antes del corte final. No para descontar ninguna de las soluciones aquí. Mi solución estaba bajo el administrador del paquete nugget y actualicé mi paquete Microsoft.Aspnet.Mvc 5.2.3 y eso solucionó mi problema. Espero que eso ayude a cualquiera que use VS 2015.
Ejecute el siguiente comando en la consola del Administrador de paquetes :
Uninstall-Package EntityFramework -Force
Install-Package EntityFramework
Uninstall-Package MvcScaffolding
Install-Package MvcScaffolding
En mi caso, resolví el problema con la cadena de conexión en web.config.
Previuos el problema que tengo
<connectionStrings configSource="Configs/ConnectionString.config"/>
y no sé por qué, pero no puedo conectarme a la base de datos y fallar.
después del cambio
<connectionStrings>
<add name="UIBuilderContext" connectionString="metadata=res:/ ..... " />
</connectionStrings>
y funciona
Esto puede ser útil para las personas que no han instalado ningún paquete nuget de andamios en su solución.
De hecho, no tengo instalado mvcscaffolding o t4scaffolding y recibí el mismo mensaje de error.
En mi caso, el problema / error fue causado al cambiar la cadena de conexión.
Aquí lo que tuve / pasos para reproducir.
- Instalado Visual Studio 2013 Community Edition
- Proyecto MVC creado
- Código creado primer modelo
Cadena de conexión editada para conectarse a un servidor real, como este:
<add name="DefaultConnection" connectionString="server=myserv;database=MyCustomerDB;user id=myuser;password=mypass" providerName="System.Data.SqlClient" />
Luego habilité las migraciones a través de Nuget, así:
- Habilitar migraciones
- Agregar-Migración InitialCreate
- Actualizar base de datos
- Inicié el sitio web y pude registrar un usuario. Todas las tablas fueron creadas correctamente
Luego creé un controlador usando la opción de andamio:
- Haga clic derecho en "Controladores"> "Agregar"> Controlador ...> Controlador MVC 5 con vistas, utilizando Entity Framework> seleccionado mi contexto y una clase para ser utilizado. Funcionó.
Luego decidí hacer más cambios en el código y comenzar de cero:
Cambié la cadena de conexión de la siguiente manera, para usar localdb :
<add name="DefaultConnection" connectionString="Data Source=(LocalDb)/v11.0;AttachDbFilename=|DataDirectory|/aspnet-Test-20141126094523.mdf;Initial Catalog=aspnet-Test-20141126094523;Integrated Security=True" providerName="System.Data.SqlClient" />
Luego continué:
- eliminó la carpeta de migraciones
- Rehabilitó migraciones usando los mismos comandos que arriba, en la consola nuget
- comenzó el sitio web y registró un usuario
- comprobado el mdf db. Todas las tablas están ahí, por lo que la cadena de conexión funciona.
- Haga clic derecho en "Controladores"> "Agregar"> Controlador ...> Controlador MVC 5 con vistas, utilizando Entity Framework. Seleccioné mi contexto y una clase para ser utilizada. No funcionó y apareció este error emergente:
Hubo un error al ejecutar el generador de código seleccionado: ''Excepción ha sido lanzada por el objetivo de una invocación''.
SOLUCIÓN:
Después de algunas investigaciones, lo que hice fue cambiar la cadena de conexión en el web.config
al inicial al "servidor real" (en lugar de a localdb). Intenté de nuevo generar el controlador con vistas. ¡Funcionó!
Entonces me parece que un problema de cadena de conexión / error o un problema de localdb ... no lo puedo explicar. Tal vez a Visual Studio no le guste lo que hice, tuve que mantener mi cadena de conexión anterior ...
De todos modos, ahora cuando necesito un andamio, simplemente cambio la cadena de conexión a la que funciona. Luego, para probar mi sitio web, lo cambio a la ubicación local.
Estoy en VS 2013 Update 4 y tengo exactamente el mismo problema. Funciona para mí cuando muevo la cadena de conexión de un archivo externo a web.config. Así que supongo que podrías intentar asegurarte de no utilizar el atributo de configuración de conexión para connectionString cuando estés andamiando.
Mi web.config antes y después del cambio Antes:
<connectionStrings configureSource="connectionStrings.config/>
Después:
<configuration>
<configSections>
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 -->
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=6.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />
</configSections>
<log4net configSource="log4net.config" />
<connectionStrings>
<clear/>
<add name="DefaultConnection" connectionString="Data Source=.;Initial Catalog=YourDb;Integrated Security=False;User ID=sa;Password=YourPassword!#;MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
</connectionStrings>
Explicaré aquí un poco más en inglés, para que todos puedan entender. Espero que esto ayude a cualquiera. Esto ocurre porque Visual Studio no se puede conectar al modelo de la base de datos.
Esto sucede cuando cambias el nombre y / o la ruta en la clase que extiende DbContext y no la cambiaste en el archivo Web.config (en la parte más externa de tu proyecto: la raíz).
Ejemplo:
Imagine que andamó el código DbContext:
a) Hizo clic derecho en una carpeta de su proyecto y agregó un "Modelo de datos de entidad ADO.NET", y lo llamó "Modelo1"
Obtienes el siguiente código:
public class Model1 : DbContext
{
// Your context has been configured to use a ''Model1'' connection string from your application''s
// configuration file (App.config or Web.config). By default, this connection string targets the
// ''Skelleton.Models.Model1'' database on your LocalDb instance.
//
// If you wish to target a different database and/or database provider, modify the ''Model1''
// connection string in the application configuration file.
public Model1()
: base("name=Model1")
{
}
// Add a DbSet for each entity type that you want to include in your model. For more information
// on configuring and using a Code First model, see http://go.microsoft.com/fwlink/?LinkId=390109.
// public virtual DbSet<MyEntity> MyEntities { get; set; }
}
b) Ahora, has decidido que el nombre que acabas de escribir es completamente malo, así que lo cambias a AppContext
Tu código ahora se ve así:
public class AppContext : DbContext
{
// Your context has been configured to use a ''AppContext'' connection string from your application''s
// configuration file (App.config or Web.config). By default, this connection string targets the
// ''Skelleton.Models.AppContext'' database on your LocalDb instance.
//
// If you wish to target a different database and/or database provider, modify the ''AppContext''
// connection string in the application configuration file.
public AppContext()
: base("name=AppContext")
{
}
// Add a DbSet for each entity type that you want to include in your model. For more information
// on configuring and using a Code First model, see http://go.microsoft.com/fwlink/?LinkId=390109.
// public virtual DbSet<MyEntity> MyEntities { get; set; }
}
Entonces, intentas andamiar las operaciones CRUD (Crear, Leer, Actualizar, Eliminar) con vistas y ¡falla!
¿Porqué es eso?
Bueno, si vamos al archivo web.config, podemos ver la siguiente cadena:
<add name="Model1" connectionString="data source=(LocalDb)/v11.0;initial catalog=Skelleton.Models.Model1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework" providerName="System.Data.SqlClient" />
(Esta línea suele estar debajo de <add name="DefaultConnection"
)
Y ahí es donde radica el problema. ¡Necesitas cambiar Model1 por el nombre que has dado!
En este caso, debería decir "AppContext" en lugar de "Model1"
Y donde dice:
initial catalog=Skelleton.Models.Model1;
Comprueba eso:
Es el nombre del archivo .cs que tiene la clase
El espacio de nombres (o la serie de nombres (separados por puntos) que aparece antes del nombre de su clase) es el correcto. Es importante notar que no agrega al final la extensión ".cs"; solo el nombre de tu archivo.
Debe tener un aspecto como este:
Debido a que cambié el nombre de la clase, tanto interna como externamente (dentro de él y su nombre de archivo), y no cambié su ubicación, simplemente lo cambio a AppContext
Después de esto se ha hecho. Puedes andamiar normalmente;)
¡Espero que esto ayude!
He realizado lo siguiente para resolver este problema:
- En Package Manager, compruebe si tiene MVCScffolding o T4Scaffolding (Core o prelanzamiento para vs2013)
- Desinstale todo el paquete que dependa de cualquiera de MVCScaffolding o T4Scaffolding
- Copie la carpeta CodeTemplates en su totalidad (No reemplace sus plantillas personalizadas, pero asegúrese de tener el resto de los archivos desde la raíz de esta carpeta. Supongo que ha hecho esa parte ya que ha personalizado algunas plantillas para que sepa dónde está esta carpeta)
- Construye tu proyecto y ciérralo.
- Reinicie Visual Studio en modo de administrador
- Abra la consola del Administrador de paquetes (no debería tener ningún error y puede ver PM> sin errores.
- Haga clic con el botón derecho en la carpeta Controlador y seleccione Agregar-> Nuevo elemento de andamio o Elija Agregar-> Controlador, ambos deberían preguntar cuál desea y luego elegir el andamio MVC5 o el que aparezca en la lista.
- Luego podrá seleccionar sus parámetros si su controlador puede necesitar elegir DBContext o repositorio, etc.
Esto produjo el controlador y las vistas relevantes para mí.
Agregué una vista parcial personalizada llamada QuickView en esa carpeta; sin embargo, este procedimiento de andamio no consideró eso y solo generó las vistas que estaba haciendo por defecto. No estoy seguro de si necesita agregar estas vistas personalizadas en un archivo para decirle a Scaffolder que las genere también.
He tenido este mismo problema en la actualización 4. Descubrí que el problema provenía de las <configSections></configSections>
no tenían un nombre de sección definido. La solución que puse entre las etiquetas es la siguiente y se corrigieron todos los errores:
<section name="entityFramework"
type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection,
EntityFramework, Version=6.0.0.0, Culture=neutral,
PublicKeyToken=b77a5c561934e089" requirePermission="false" />
Construya el proyecto y todo debería funcionar. ¡Aclamaciones!
Hola a todos ustedes que nada funciona, la verdadera respuesta es que deben eliminar CUALQUIER COSA que tenga un configSource en el web.config y la cadena de conexión debe estar en línea.
EDITAR:
Alguien señaló que solo necesitan ser las <configSettings>
, <appSettings>
y <connectionStrings>
no usan un atributo configSource. Y que todavía era capaz de usar los atributos de configSource en otro lugar, como la etiqueta de reescritura.
Creo que el herramental no puede seguir las ubicaciones de configSource para las cosas que utiliza, como las cadenas de conexión y la configuración de la aplicación.
Microsoft debería estar en este tema si aún no se ha solucionado.
EDICION 2:
Incluso el pensamiento @awrigley ha marcado su respuesta como correcta, es un error conocido de Visual Studio. Me las he arreglado para decirlo y creo que recibirá algo de atención pronto. https://github.com/aspnet/Tooling/issues/169#issuecomment-144197015
Para mí, lo que funcionó fue asegurarme de que el nodo <configSections>
en el archivo web.config fuera el primer nodo inmediatamente después del nodo <configuration>
.
Inicialmente, cuando agregué configSections
, lo había colocado antes de las configSections
, lo que hizo que la herramienta Scaffold se rompiera.
Parece que cuando el andamio se ejecuta e intenta obtener información de conexión, espera que la sección de configuración para el nodo entityFramework ya esté allí para saber qué proveedor DB usar, pero cuando tenía la cadena de conexión antes de configSections, no sabía usar LocalDB (que es lo que estaba usando mi cadena de conexión).
Para mí, tuve que asegurarme de que las <configSettings>
, <appSettings>
, & <connectionStrings>
NO usaran un atributo configSource
.
Todavía pude usar los atributos de configSource
otros lugares, como la etiqueta de rewriter
.
Tuve el mismo problema con Visual Studio 2013 Update 3, pero solo para los scaffolders que trabajan con Entity Framework. Aparentemente, el problema se debe a la incompatibilidad entre Entity Framework 6.1.0 y los scaffolders en Visual Studio 2013 Update 2 y versiones posteriores.
Para actualizar EF, haga lo siguiente:
Uninstall-Package EntityFramework -Force
Install-Package EntityFramework
Esta respuesta es prestada de aquí
Después de la actualización, los scaffolders están funcionando bien para mí. Asegúrese de instalar la nueva versión en cada proyecto donde se requiera Entity Framework.
Una combinación de cosas me ha funcionado:
Actualice a Visual Studio 2013 Update 3.
Actualizar Entity Framework a 6.1.1
Modifique la configuración de contexto para usar IDbSet <...> en lugar de DbSet <...> (He oído que esto puede afectar el uso de acciones asíncronas, pero aparentemente no en mi caso, ya que lo uso en mis acciones de inicio de sesión, etc. como lo proporciona el paquete Nuget de muestra Identity 2 de ASP.NET).
Por qué funciona esta combinación, no tengo ni idea. Pero dado el silencio atronador de MS, probablemente no estoy solo. Supongo que la actualización 2 simplemente no funcionó ...
utilicé el inicializador y cuando eliminé / comencé el inicializador del constructor myDbContext, el andamiaje funciona bien
public myDbContext () : base("name=DefaultConnection")
{
//Database.SetInitializer(new DropCreateDatabaseIfModelChanges<DastanakDbContext>());
//Database.Initialize(true);
}
Solución
Asegúrate de la sección
<connectionStrings>..</connectionStrings>
es despues
<configSections>..</configSections>