Mostrando entradas con la etiqueta msbuild. Mostrar todas las entradas
Mostrando entradas con la etiqueta msbuild. Mostrar todas las entradas

Compilar desde una aplicacion Web utilizando API build tools

Referencias que se necesitan:
Microsoft.Build
Microsoft.Build.Engine
Microsoft.Build.Framework

Estas dll's se encuentran en C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.1\

si no aparecen, instalarlos asi:
vs_buildtools.exe --add Microsoft.VisualStudio.Workload.WebBuildTools

o bajarlo de aca: https://www.visualstudio.com/es/thank-you-downloading-visual-studio/?sku=BuildTools&rel=15


using System.Collections.Generic;
using Microsoft.Build.Evaluation;
using Microsoft.Build.Execution;
using System.IO;
using Microsoft.Build.Framework;

            var exitcode = 0;

            string projectFileName = @"C:\crusso\X\fuentes\Desarrollo\WebCreditos\WebCreditos.sln";
            ProjectCollection pc = new ProjectCollection();
            Dictionary<string, string> GlobalProperty = new Dictionary<string, string>();
            GlobalProperty.Add("Configuration", "Release");
            GlobalProperty.Add("Platform", "Any CPU");
            GlobalProperty.Add("OutputPath", Directory.GetCurrentDirectory() + "\\deploy");

            Microsoft.Build.BuildEngine.FileLogger fl = new Microsoft.Build.BuildEngine.FileLogger() { Parameters = @"logfile=c:\temp\log.txt" };

            BuildParameters bp = new BuildParameters(pc);
           
            bp.Loggers = new[] {
                                  new Microsoft.Build.BuildEngine.FileLogger
                                  {
                                    Verbosity = LoggerVerbosity.Normal,
                                    ShowSummary = true,
                                    SkipProjectStartedText = true,
                                    Parameters = @"logfile=c:\temp\log.txt"
                                  }
                                };
           
            BuildManager.DefaultBuildManager.BeginBuild(bp);
            BuildRequestData BuildRequest = new BuildRequestData(projectFileName, GlobalProperty, null, new string[] { "Build" }, null);
            BuildSubmission BuildSubmission = BuildManager.DefaultBuildManager.PendBuildRequest(BuildRequest);
            BuildSubmission.Execute();
            BuildManager.DefaultBuildManager.EndBuild();

            if (BuildSubmission.BuildResult.OverallResult == BuildResultCode.Failure)
            {
                exitcode = 1; //error
                //throw new Exception();
            }
            else
                exitcode = 0;

            return exitcode

Delay sign a DLL - Firmar una dll con SN y MsBuild desde linea de comando

call "%VS120COMNTOOLS%..\Tools\vsvars32.bat"

IF NOT EXIST "C:\temp\Generados\outGAC\Signed" mkdir "C:\temp\Generados\outGAC\Signed"

IF EXIST "C:\temp\Generados\outGAC\Signed\LibX.dll" del "C:\temp\Generados\outGAC\Signed\LibX.dll"

msbuild.exe "C:\crusso\X\fuentes\desarrollo\_DLL\LibX\LibX.vbproj" /p:TargetFrameworkVersion=v4.5.1;Configuration=Release /tv:4.0 /t:Rebuild /p:OutDir="C:\temp\Generados\outGAC" /p:PreBuildEvent= /p:PostBuildEvent= /p:SignAssembly=true /p:AssemblyOriginatorKeyFile="c:\crusso\X\fuentes\desarrollo\_KEYSTORE\Desarrollo\keyLibX.snk" /p:DelaySign=true

sn -R "C:\temp\Generados\outGAC\LibX.dll" "c:\crusso\X\fuentes\desarrollo\_KEYSTORE\Desarrollo\keyLibX.snk"

gacutil.exe /i "C:\temp\Generados\outGAC\LibX.dll" /f

Post build event: The command xxx exited with code 9009

Este error ocurre cuando faltan los seteos de entorno de Visual Studio.
Para solucionarlo, en el post build event agregar como 1ra linea esta sentencia:

call "$(DevEnvDir)..\Tools\vsvars32.bat"

Customizar proceso de compilación en Visual Studio (ej para quitar readonly)

Ejemplo:

Quitar atributo readonly de la solucion antes de empezar la compilación:

1. Editar el archivo

C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Common.CurrentVersion.targets

***si no deja modificarlo es porque el usuario no tiene permisos sobre este archivo. Editar las propiedades del archivo, luego ir a seguridad y agregar el usuario con permisos sobre el mismo***

2. Buscar el tag <Target Name="BeforeBuild" /> y sustituirlo por lo siguiente

<Target Name="BeforeBuild">
    <Message Text ="Hello World" />
    <Exec Command="calc.exe" />
</Target>

Esto es un ejemplo, cuando se compile un proyecto de .Net, en el output de la compilación aparecerá el mensaje Hello World, y se abrira la calculadora:

Target "BeforeBuild: (TargetId:3)" in file "C:\Program Files (x86)\MSBuild\12.0\bin\Microsoft.Common.CurrentVersion.targets" from project "c:\temp\PruebaXX\PruebaXX\PruebaXX.csproj" (target "Build" depends on it):
Task "Message" (TaskId:4)
Task Parameter:Text=Hello World (TaskId:4)
Hello World (TaskId:4)
Done executing task "Message". (TaskId:4)


Ejemplo 2: Quitar atributo Readonly de la solución antes de iniciar la compilación

Editar el archivo

C:\Program Files (x86)\MSBuild\12.0\Bin\Microsoft.Common.CurrentVersion.targets

Sustituir
     <Target Name="BeforeBuild" />  
por
     <Target Name="BeforeBuild">  
<Exec Command="attrib -R $(SolutionDir)*.* /S" />  
     </Target>

Sustituir
     <Target Name="BeforeReBuild" />  
por
     <Target Name="BeforeRebuild">
<Exec Command="attrib -R $(SolutionDir)*.* /S" />
     </Target>

Sustituir
     <Target Name="BeforeCompile" />
por
     <Target Name="BeforeCompile">
<Exec Command="attrib -R $(SolutionDir)*.* /S" />  
     </Target>

Sustituir
     <Target Name="BeforeClean" />
por
     <Target Name="BeforeClean">
<Exec Command="attrib -R $(SolutionDir)*.* /S" />
     </Target>


En este link también hay ejemplos para ejecutar código C# dentro del xml

https://www.universalthread.com/ViewPageArticle.aspx?ID=61