Come seguito al post precedente, ecco una funzioncina per buildare una solution da codice.
Questa funzione NON tiene conto di eventuali build configuration e/o di
progetti unloadati.
A mio avviso è un bug dell'msbuild (e non l'unico, direi), in quanto,
provando a buildare la stessa solution da codice, da visual studio e da
console si ottengono SEMPRE risultati diversi.
Ho chiesto all'inutile-come-sempre supporto msdn, ma mi solo solo fatto del gran nervoso, ecco il link alla discussione.
public static bool BuildSolution()
{
bool result = false;
try
{
string solutionPath = @"C:\path\della\solution.sln";
ProjectCollection pc = new ProjectCollection();
//definiamo le property della build (ci sono miliardi di opzioni diverse)
Dictionary<string, string=""> globalProperty = new Dictionary<string, string="">();
globalProperty.Add("Configuration", "Release");
globalProperty.Add("Platform", "Any CPU");
globalProperty.Add("OutputPath", "bin\Debug");
BuildParameters bp = new BuildParameters(pc);
BuildRequestData BuidlRequest = new BuildRequestData(solutionPath, globalProperty, "4.0", new string[] { "Build" }, null);
BuildResult buildResult = BuildManager.DefaultBuildManager.Build(bp, BuidlRequest);
//questo è il modo più semplice per controllare che la build sia andata a buon fine
if (buildResult.OverallResult == BuildResultCode.Success)
{
Console.WriteLine("Build eseguita correttamente");
result = true;
}
else
//a volte succede che l'exception sia null
if (buildResult.Exception == null)
Console.WriteLine("Build fallita: lista errori non disponibile");
else
Console.WriteLine("Build fallita: " + buildResult.Exception.ToString());
}
catch (Exception e)
{
Console.WriteLine("Build Fallita: " + e.ToString());
}
return result;
}
Quando si è in cerca di soluzioni relative all'ambiente .NET, consiglio
di evitare come la peste tutto quello che nell'url ha "msdn".
Rispondono alle discussioni esclusivamente per aumentare il loro post
count nella speranza di ottenere qualche punto per poi bullarsi di
essere "MSMVP", un titolo che mi sembra che venga dato assolutamente a
caso.
Si segnano come risposte i loro post inutili, aumentandosi il rank da
soli.
"Non mi builda la soluzione"
"Hai provato a buildare?"
"Ma ho appena detto che..."
"Ma se buildi da console?"
"Ma veramente..."
"La soluzione ti builda?"
"..."
---"La soluzione ti builda?" è stata segnata come risposta al thread
E ricordate, se avrete a che fare con il supporto msdn sappiate che
sarete nel torto a prescindere.
Visual Studio non ha bachi, il problema sarà sicuramente sempre colpa
vostra.
Comments !