Ich versuche, Builds mit der MSBuild-API zu automatisieren - "BuildManager".MSBuild mit BuildManager kann Bootstrapperpfad oder SignTool.exe nicht finden
Der folgende Code funktioniert gut für das Erstellen von Lösungen/Projekten, schlägt jedoch fehl, wenn es um das Veröffentlichen geht. Das Projekt wird ordnungsgemäß veröffentlicht, wenn die Visual Studio-Veröffentlichungsseite verwendet wird.
var collection = new ProjectCollection();
var parameters = new BuildParameters(collection);
parameters.Loggers = new List<ILogger> { Logger };
parameters.MaxNodeCount = Environment.ProcessorCount; //maxcpucount
var globalProperties = new Dictionary<string, string>();
globalProperties.Add("Configuration", "Debug");
globalProperties.Add("Platform", "AnyCPU");
globalProperties.Add("OutDir", binPath);
globalProperties.Add("OutputPath", publishPath);
globalProperties.Add("ApplicationVersion", version.ToString());
globalProperties.Add("GenerateBootstrapperSdkPath", @"C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\");
//Doesn't work!
globalProperties.Add("SignToolPath", @"C:\Program Files (x86)\Microsoft SDKs\ClickOnce\SignTool\signtool.exe");
BuildManager.DefaultBuildManager.ResetCaches();
var buildRequest = new BuildRequestData(projectFile.FileInfo.FullName, globalProperties, "4.0", new[] { "Rebuild", "Publish" }, null);
var buildResult = BuildManager.DefaultBuildManager.Build(parameters, buildRequest);
Wenn ich diesen Code ausführen, schlägt es mit dem folgenden Fehler:
An error occurred while signing: SignTool.exe not found.
Wie Sie sehen, ich hinzufüge, die globale Eigenschaft namens „GenerateBootstrapperSdkPath“, die, wenn ihr nicht dort führt zu dieser Fehler:
Could not find required file 'setup.bin' in 'C:\PathToProject\Engine'.
Dies scheint ein Teufelskreis, so schnell zu sein, wie ich einen Weg für das Bootstrap-Programm angeben, es kann die SignTool.exe nicht finden, wenn ich es nicht, kann nicht das finden setup.bin.
Leider scheint die globale Eigenschaft "SignToolPath" nichts zu tun.
Irgendwelche Ideen?
Und in der Zwischenzeit, vernünftige Verwendung von if (File.Exists (....)) wäre gut vor dem Pflügen blind voraus unter der Annahme, dass verschiedene absolute Pfade existieren. –