首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MSBuild使用BuildManager找不到引导程序路径或SignTool.exe

MSBuild使用BuildManager找不到引导程序路径或SignTool.exe
EN

Stack Overflow用户
提问于 2017-10-23 16:32:20
回答 1查看 494关注 0票数 1

我正在尝试使用MSBuild API - "BuildManager“实现构建自动化。

以下代码对于构建解决方案/项目很好,但在发布时却失败了。项目在使用Visual发布页时发布得很好。

代码语言:javascript
复制
            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“似乎什么也没做。

有什么想法吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-10-23 16:52:35

MSBuild定位引导程序存在一个老问题,可以通过创建注册表项来解决这个问题:

代码语言:javascript
复制
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\GenericBootstrapper\4.0]
@="0"
"Path"="C:\\Program Files\\Microsoft SDKs\\Windows\\v7.1\\Bootstrapper\\" 

只需将其设置为SDK版本,然后再试一次。或者在BuildManager代码中使用引导程序的路径,而不是使用上面的路径:

代码语言:javascript
复制
C:\Program Files (x86)\Microsoft SDKs\ClickOnce Bootstrapper\

根据一个旧的博客条目,将解析以下注册表值以搜索引导程序路径,并最终检查引擎子文件夹下的本地项目文件夹,当未找到时,MSBuild抛出MSB3147错误:

代码语言:javascript
复制
HKLM\Software\Microsoft\GenericBootstrapper\<.NET Tools Version>\
HKLM \Software\Microsoft.NetFramework\SDKInstallRoot\Bootstrapper
HKLM \Software\Microsoft\VisualStudio\\InstallDir\Bootstrapper

使用引导程序为ClickOnce应用程序构建团队

我从您的描述中了解到,找到引导程序位置的解决方案将解决您的问题,因为在该配置中,您没有观察到任何SignTool.exe问题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46894257

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档