“SetOffice2007AddInRegistration”任务意外失败

时间:2016-04-27 22:14:17

标签: c# msbuild visual-studio-2015 vsto office-2016

我在Visual Studio 2015中使用 Word 2013和2016 VSTO加载项模板创建了一个新的C#项目。我没有对自动生成的项目代码进行任何更改以便查看它将如何构建在我的TFS 2015 Build Server上。构建产生以下错误:

  

C:\ Program Files(x86)\ MSBuild \ Microsoft \ VisualStudio \ v14.0 \ OfficeTools \ Microsoft.VisualStudio.Tools.Office.targets(315,0)
  “SetOffice2007AddInRegistration”任务意外失败。   System.Runtime.InteropServices.COMException(0x800703F0):尝试引用不存在的令牌。 (HRESULT异常:0x800703F0)   在Microsoft.VisualStudio.Tools.Office.Runtime.Interop.VSTOEENativeMethods.GetVSTOEEHandle()   在Microsoft.VisualStudio.Tools.Office.Runtime.Interop.VSTOEENativeMethods.GetSolutionMetadata(String solutionInfoString)   在Microsoft.VisualStudio.Tools.Applications.OfficeSolutionMetadata..ctor(String manifestLocation)   在Microsoft.VisualStudio.Tools.Office.Runtime.AddInRegistryKeyManager.RegisterAddIn(Uri manifestUri,String addInName,String officeApplication,String friendlyName,String description,Int32 loadBehavior,String compatibleFrameworkXML,Boolean runLocal)   在Microsoft.VisualStudio.Tools.Office.BuildTasks.SetOffice2007AddInRegistration.Execute()   在Microsoft.Build.BackEnd.TaskExecutionHost.Microsoft.Build.BackEnd.ITaskExecutionHost.Execute()   在Microsoft.Build.BackEnd.TaskBuilder.d__26.MoveNext()

构建服务作为域帐户运行,该帐户是安装了构建服务的Windows Server 2012的管理员。 Visual Studio 2015和Office 2016安装在此Windows Server上。

当我在本地PC上的Visual Studio 2015中构建项目时,我没有任何错误。 如果您在工作中遇到同样的问题,请帮忙。谢谢。

2 个答案:

答案 0 :(得分:1)

此问题与TFS无关。

但我在this网站上找到了Jens的解决方案,该解决方案可以帮助您:

根据MSDN Library SetOffice2007AddInRegistration“定义一个MSBuild任务,用于创建或删除运行或卸载2007 Microsoft Office系统加载项所需的注册表项。”所以我检查了注册表,并发现仍然存在的唯一条目是 HKEY_CURRENT_USER \ Software \ Microsoft \ VSTO \ SolutionMetadata 下的条目,其中VSTO缓存解决方案的元数据。我删除了所有密钥和子密钥(您现有的解决方案仍然有效,它只是缓存的元数据)并且我的解决方案已成功编译。

答案 1 :(得分:1)

由于我花费了大量时间来解决此错误并无处可去,我想与其他人分享我的经验。我怀疑MSBuild在为Office Addin项目的XAML构建定义运行时有一个错误。

我在Visual Studio 2015中创建了一个全新的Word 2016 Addin项目。没有自定义代码。该项目只有自动生成的代码。 Visual Studio构建了没有错误的项目。我运行构建时选择了MSBuild Diagnostic输出Verbosity选项。

之后,我从命令行运行MSBuild程序,其参数与TFS Build Server运行构建的参数相同。唯一的区别是用于创建详细日志的Diagnostic verbosity log选项。我比较了Visual Studio和MSBuild生成的两个日志。 MSBuild日志表明工作流程从未进入取消注册Addin的步骤。实际上,它试图在不注销的情况下注册Addin。 Visual Studio日志显示Visual Studio构建未注册Addin并在成功之后注册它。

学习TFS 2015功能,我发现了Agent Pool和Build Agents。我意识到,TFS 2015 Build Agent不是为XAML定义的构建运行MSBuild,而是使用Visual Studio构建应用程序。因此,我在构建服务器上设置了代理池和构建代理,瞧,Addin已成功构建!

结论是,如果您为Addin项目安装了XAML,请不要在TFS 2015中使用它。使用TFS 2015中提供的代理池功能创建新的TFS构建定义。这将保证您的构建将在TFS构建服务器与Visual Studio环境中的PC完全相同。