我正在尝试使用 MSBuild API - “BuildManager”自动化构建。
以下代码适用于构建解决方案/项目,但在发布时失败。使用 Visual Studio 发布页面时,项目发布得很好。
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);
如果我运行此代码,它将失败并出现以下错误:
签名时出错:找不到 SignTool.exe。
如您所见,我正在添加名为“GenerateBootstrapperSdkPath”的全局属性,如果它不存在会导致此错误:
在“C:\PathToProject\Engine”中找不到所需的文件“setup.bin”。
这似乎是一个恶性循环,一旦我为引导程序指定了路径,它就找不到 SignTool.exe,如果我没有它就找不到 setup.bin。
不幸的是,全局属性“SignToolPath”似乎没有做任何事情。
有任何想法吗?