使用 MSBuild 发布 VSTO 加载项会出现错误:“SignFile”任务意外失败。 System.ArgumentNullException:值不能为空

Posted

技术标签:

【中文标题】使用 MSBuild 发布 VSTO 加载项会出现错误:“SignFile”任务意外失败。 System.ArgumentNullException:值不能为空【英文标题】:Publishing VSTO add-in using MSBuild gives error: The "SignFile" task failed unexpectedly. System.ArgumentNullException: Value cannot be null 【发布时间】:2015-04-01 17:32:29 【问题描述】:

我正在尝试在没有 Visual Studio 的 TeamCity 构建服务器上使用 MSBuild 发布适用于 Word 的 VSTO 加载项。我已经完成了这两个博客文章中的内容:

http://kentb.blogspot.com/2008/08/building-vsto-projects-without-visual.html http://www.wiktorzychla.com/2011/02/msb3147-could-not-find-required-file-on.html

我的构建文件是我的 Visual Studio 解决方案,我的目标是“发布”。 ClickOnce 在我的开发机器上的 Visual Studio 2013 中发布工作正常。

但是在构建服务器上,我得到了这个:

[签名文件] C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v12.0\OfficeTools\Microsoft.VisualStudio.Tools.Office.targets(612, 9):错误MSB4018:“SignFile”任务意外失败。 System.ArgumentNullException:值不能为空。参数名称: System.IO.Path.Combine 处的路径 1(字符串路径 1,字符串路径 2,字符串 路径 3) 在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.GetPathToTool() 在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.SignPEFile(X509Certificate2 cert、Uri timestampUrl、String path、ResourceManager 资源、 布尔使用Sha256)在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.SignFile(X509Certificate2 证书,Uri timestampUrl,字符串路径)在 Microsoft.Build.Tasks.Deployment.ManifestUtilities.SecurityUtilities.SignFile(字符串 certThumbprint,Uri timestampUrl,字符串路径)在 Microsoft.Build.Tasks.SignFile.Execute() 在 Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute() 在 Microsoft.Build.BackEnd.TaskBuilder.d__20.MoveNext()

我不知道这意味着什么或如何解决它。有什么想法吗?

【问题讨论】:

【参考方案1】:

回答我自己的问题,因为这可能对将来的人有所帮助。

我发现这是因为那个版本的 SignFile 任务需要我没有安装的 signtool.exe。我安装了 Windows SDK 并勾选了所有选项,它已安装,我的发布任务现在可以工作了。我不确定它属于哪个选项,但我认为它不是 .NET 的,因为我已经安装了它。

【讨论】:

根据unawave.de/windows-7-tipps/4-gb-patch-selber-machen/…它在“Windows Native Code Development”->“Tools”中

以上是关于使用 MSBuild 发布 VSTO 加载项会出现错误:“SignFile”任务意外失败。 System.ArgumentNullException:值不能为空的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 VS 2012 创建 (VSTO) Office 2007 加载项?

如何对无法加载的 VSTO 插件进行故障排除?

VSTO避免多次加载窗体

VSTO、Outlook 加载项和 Visual Studio 2015

Outlook VSTO 加载项与外部 C++ 应用程序之间的交互

以编程方式安装 VSTO 加载项