Supongamos que agrego un destino personalizado a un archivo csproj. ¿Hay alguna forma de ejecutar ese objetivo desde Visual Studio? No quiero que sea un paso de preconstrucción o postconstrucción, solo quiero poder ejecutar este objetivo (y sus dependencias) desde Visual Studio.ejecutar un destino personalizado msbuild desde VisualStudio
Respuesta
Hay una manera simple (aunque no del todo satisfactoria) que utiliza una herramienta externa personalizada.
Suponiendo que el archivo de proyecto tiene la siguiente modificación:
<Target Name="CalledFromIde">
<Error Text="Called from the IDE!" />
</Target>
Vaya a Herramientas | Herramientas externas y agregar uno como este:
Title: Called from IDE
Command: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Arguments: $(ProjectDir)$(ProjectFileName) /t:CalledFromIde
Initial directory: $(ProjectDir)
Use Output window: checked
La ejecución de este produce una salida como:
Build FAILED.
"F:\Code\CsProject\CsProject.csproj" (CalledFromIde target) (1) ->
(CalledFromIde target) ->
F:\Code\CsProject\CsProject.csproj(57,5): error : Called from the IDE!
Lo que está haciendo es llamando a MSBuild como una herramienta externa y hacer que se ejecute el objetivo directamente. Debe proporcionar la ruta completa a MSBuild porque el IDE no mantiene las mismas propiedades que el entorno de compilación que crea tiene disponible.
Puede conectarlo a un atajo determinando qué comando # está en el conjunto Tools.ExternalCommand #.
Si está buscando una solución con más sofisticación, es un poco más complicado. Aquí está en pocas palabras (para VS2010):
1) Cree un complemento de VS (Archivo | Nuevo | Proyecto | Otros tipos de proyecto | Extensibilidad | Complemento de Visual Studio). No estoy seguro de si debe tener instalado VS SDK para obtenerlo; está disponible en el administrador de extensiones.
Seleccione las siguientes opciones en el asistente: - Microsoft Visual Studio 2010 - Sí, crear un elemento de menú 'Herramientas' - carga cuando se inicia la aplicación - Mi complemento no tolerará la interfaz de usuario modal, y se puede usar con compilaciones de línea de comando.
2) Añadir referencias a Microsoft.Build y Microsoft.Build.Framework
3) Encuentra la implementación de Exec en los Connect.cs archivo
4) Reemplazar con este código:
public void Exec(
string commandName,
vsCommandExecOption executeOption,
ref object varIn,
ref object varOut,
ref bool handled)
{
handled = false;
if (executeOption != vsCommandExecOption.vsCommandExecOptionDoDefault)
return;
if (commandName != "BuildAddin.Connect.BuildAddin")
return;
var doc = _applicationObject.ActiveDocument;
var projectItem = doc.ProjectItem;
var project = projectItem.ContainingProject;
var evalProject =
Microsoft.Build.Evaluation.ProjectCollection
.GlobalProjectCollection.LoadProject(project.FullName);
var execProject = evalProject.CreateProjectInstance();
bool success = execProject.Build("CalledFromIde", null);
var window = _applicationObject.Windows.Item(Constants.vsWindowKindOutput);
var output = (OutputWindow)window.Object;
OutputWindowPane pane = output.OutputWindowPanes.Add("BuildAddin");
pane.OutputString(success ? "built /t:CalledFromIde" : "build failed");
handled = true;
return;
}
5) Una mejor destino personalizada durante la depuración, ya que el que los errores anteriores:
<Target Name="CalledFromIde">
<WriteLinesToFile File="CalledFromIde.txt" Lines="Called from the IDE!" />
</Target>
6) El código anterior no tiene ningún error para verificar la brevedad, querrá ser mucho más limpio, ya que se ejecutará en el IDE. El complemento colocará un elemento de menú en el menú Herramientas. Como se describió anteriormente, simplemente busca el proyecto que contiene el documento del editor actualmente activo, que necesitaría una mejor fontanería para lo que esté cocinando.
Esta técnica obtiene la instancia del motor de compilación dentro del IDE y hace que ejecute una compilación en una instancia separada del proyecto.
No tiene que codificar con el Exec, aunque esa es una forma de hacerlo.La manera más fácil es hacer lo siguiente:
En el atributo DefaultTargets="Build"
a una costumbre de destino que crea, dicen "All"
así:
DefaultTargets="All"
A continuación, en su aduana "Todos" de destino, puede utilizar los DependsOnTargets atribuir, como la siguiente:
"<Target Name="All" DependsOnTargets="ZipOutputFiles;Build">
</Target>"
Esto entonces construir y poner fuera de archivos zip en su objetivo de encargo "All"
.
Si está ejecutando la compilación dentro de Visual Studio, habrá una variable de compilación de VisualStudioDir durante la compilación.
Para ejecutar sólo es un VS construir sesión de hacer esto:
<Target Name="Test" BeforeTargets="Build" Condition="'$(VisualStudioDir)' != ''>
</Target>
Para ejecutar sólo en una construcción fuera de VS hacer esto:
<Target Name="Test" BeforeTargets="Build" Condition="'$(VisualStudioDir)' == ''>
</Target>
Usted tendrá que incluir el archivo de destino personalizado en una de dos maneras.
- Conjunto CustomBeforeMicrosoftCommonTargets la variable de entorno
Editar el archivo del proyecto para incluir el archivo de destino personalizado mediante la adición de una importación
<Imports Project="CustomBuildTasks.Targets"><Imports/>
- 1. MSBuild: especificando un destino desde la línea de comando
- 2. Cómo llamar a un destino MSBuild anulado
- 3. proceso msbuild parada si un destino falla
- 4. Cómo ejecutar nunit con msbuild desde VS2010
- 5. MSBuild - Obteniendo el destino llamado desde la línea de comando
- 6. Uso de MsBuild para generar el manifiesto personalizado de MsDeploy (destino del paquete)
- 7. Compilación de destino MSBuild sin dependencias
- 8. MSBuild tarea para ejecutar un archivo MSBuild externo
- 9. Paquete de destino de MSBuild no encontrado
- 10. Ejecutar MSI x86 o x64 desde MSBuild bootstrapper
- 11. ¿Cómo ejecutar MSBuild desde Powershell sin generar el proceso msbuild.exe?
- 12. Cómo ejecutar tareas en paralelo en MSBuild
- 13. Pase el objetivo de msbuild personalizado desde la solución al proyecto
- 14. ¿Cómo usar MsBuild MsDeployPublish para el sistema de archivos local de destino?
- 15. Versión específica de destino de .NET con MSBuild
- 16. Cómo detener MSBuild _WPPCopyWebApplication limpieza de destino carpeta App_Data
- 17. Sobrescribir el marco de destino desde la línea de comando
- 18. Cómo ejecutar pruebas MSUnit con MSBuild
- 19. Ejecutar JavaScript personalizado en páginas específicas del sitio desde un único archivo
- 20. Ventajas de usar MSBuild o NAnt versus ejecutar DevEnv.exe desde la línea de comandos
- 21. ShimNotSupportedException en MS VisualStudio 2012
- 22. ¿Cómo se integra un enfoque TDD con VisualStudio?
- 23. Cómo llama a varias secuencias de comandos de MSBuild desde una secuencia de comandos de MSBuild
- 24. Ejecutar pruebas unitarias utilizando MSBUILD línea de comandos
- 25. Realice una ejecución de destino una vez en el nivel de Solución en MSBuild
- 26. Cómo llamar a MSBuild desde C#
- 27. Comando msbuild equivalente para publicar desde VS2008
- 28. ¿Cómo invocar MSBuild desde PowerShell usando & operator?
- 29. MSBuild NullReferenceException en Microsoft.TeamTest.targets
- 30. Error de VisualStudio?