使用 BuildManager 的 MSBuild 找不到引导程序路径或 SignTool.exe
MSBuild using BuildManager cannot find bootstrapper path or SignTool.exe
我正在尝试使用 MSBuild API - "BuildManager".
自动构建
以下代码可以很好地构建 solutions/projects 但在发布时会失败。
该项目在使用 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);
如果我 运行 此代码,它会失败并出现以下错误:
An error occurred while signing: SignTool.exe not found.
如您所见,我正在添加名为 "GenerateBootstrapperSdkPath" 的全局 属性,如果它不存在,则会导致此错误:
Could not find required file 'setup.bin' in
'C:\PathToProject\Engine'.
这好像是一个恶性循环,我一给bootstrapper指定路径,就找不到SignTool.exe,不指定就找不到[=33] =].
不幸的是全局 属性 "SignToolPath" 似乎没有做任何事情。
有什么想法吗?
MSBuild 定位引导程序存在一个老问题,可以通过创建注册表项解决:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper.0]
@="0"
"Path"="C:\Program Files\Microsoft SDKs\Windows\v7.1\Bootstrapper\"
只需将其设置为您的 SDK 版本,然后重试。或者也许在基于上述代码的 BuildManager 代码中使用引导程序的路径,而不是:
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\
根据其中一个旧博客条目,在搜索引导程序路径时解析了以下注册表值,最后检查了 Engine 子文件夹下的本地项目文件夹,如果找不到,MSBuild 将抛出 MSB3147 错误:
HKLM\Software\Microsoft\GenericBootstrapper\<.NET Tools Version>\
HKLM \Software\Microsoft.NetFramework\SDKInstallRoot\Bootstrapper
HKLM \Software\Microsoft\VisualStudio\InstallDir\Bootstrapper
Team build for ClickOnce application with bootstrapper
我从你的描述中了解到,找到引导程序位置的解决方案将解决你的问题,因为在该配置中你没有观察到任何 SignTool.exe 问题。
我正在尝试使用 MSBuild API - "BuildManager".
自动构建以下代码可以很好地构建 solutions/projects 但在发布时会失败。 该项目在使用 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);
如果我 运行 此代码,它会失败并出现以下错误:
An error occurred while signing: SignTool.exe not found.
如您所见,我正在添加名为 "GenerateBootstrapperSdkPath" 的全局 属性,如果它不存在,则会导致此错误:
Could not find required file 'setup.bin' in 'C:\PathToProject\Engine'.
这好像是一个恶性循环,我一给bootstrapper指定路径,就找不到SignTool.exe,不指定就找不到[=33] =].
不幸的是全局 属性 "SignToolPath" 似乎没有做任何事情。
有什么想法吗?
MSBuild 定位引导程序存在一个老问题,可以通过创建注册表项解决:
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper.0]
@="0"
"Path"="C:\Program Files\Microsoft SDKs\Windows\v7.1\Bootstrapper\"
只需将其设置为您的 SDK 版本,然后重试。或者也许在基于上述代码的 BuildManager 代码中使用引导程序的路径,而不是:
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\
根据其中一个旧博客条目,在搜索引导程序路径时解析了以下注册表值,最后检查了 Engine 子文件夹下的本地项目文件夹,如果找不到,MSBuild 将抛出 MSB3147 错误:
HKLM\Software\Microsoft\GenericBootstrapper\<.NET Tools Version>\
HKLM \Software\Microsoft.NetFramework\SDKInstallRoot\Bootstrapper
HKLM \Software\Microsoft\VisualStudio\InstallDir\Bootstrapper
Team build for ClickOnce application with bootstrapper
我从你的描述中了解到,找到引导程序位置的解决方案将解决你的问题,因为在该配置中你没有观察到任何 SignTool.exe 问题。