0

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

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.GetSolutionMetadata(String solutionInfoString) 在 Microsoft.VisualStudio.Tools.Office.Runtime.Interop.VSTOEENativeMethods.GetVSTOEEHandle() 在 Microsoft.VisualStudio。 Microsoft.VisualStudio.Tools.Office.Runtime.AddInRegistryKeyManager.RegisterAddIn 上的 Tools.Applications.OfficeSolutionMetadata..ctor(字符串 manifestLocation)(Uri manifestUri,字符串 addInName,字符串 officeApplication,字符串friendlyName,字符串描述,Int32 loadBehavior,字符串 compatibleFrameworkXML,布尔 runLocal ) 在 Microsoft.VisualStudio.Tools.Office。

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

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

4

2 回答 2

1

由于我花费了大量时间试图解决此错误并且一无所获,因此我想与其他人分享我的经验。我怀疑 MSBuild 在为 Office 插件项目的 XAML 构建定义运行时存在错误。

我在 Visual Studio 2015 中创建了一个全新的 Word 2016 Addin 项目。没有自定义代码。该项目只有自动生成的代码。Visual Studio 没有错误地构建项目。我在选择 MSBuild 诊断输出详细信息选项的情况下运行构建。

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

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

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

于 2016-05-26T03:39:53.227 回答
1

此问题与 TFS 无关。

但是我在这个网站上找到了 Jens 的解决方案,它应该可以帮助你:

"

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

"

于 2016-04-28T03:31:28.647 回答