无法生成Excel VSTO加载项:“试图为winmd文件加载格式错误的程序”

问题描述 投票:0回答:1

我无法构建针对.NET Framework 4.7.2的项目。具体来说,这是一个使用ClickOnce部署的Excel VSTO加载项。

我正在使用Visual Studio2019。加载项具有有效的代码库,但以前它的目标是.NET的早期版本(4.0、4.5)。一些依赖关系及其与之交互的Web服务的更改意味着以前需要将某些库升级到更高版本,因此某些依赖关系改组使我陷入了混乱。

构建始终会失败,并出现以下形式的错误:

问题生成清单。无法加载文件或程序集'PATH_TO_NUGET_PACKAGES\microsoft.windows.sdk.contracts\**\*.winmd'或其依赖项之一。试图加载格式错误的程序。

它们全部都在该Microsoft.Windows.Sdk.Contracts命名空间中,该名称空间是在此途中获得的。此加载项使用WinForms。

我在这里和其他地方都看到了类似问题的几个答案,但是没有一种解决方案可用于解决我的问题。

例如,在'Could not load file or assembly exception'中,给出了几个选项。可接受的答案涉及ClickOnce安全设置,但是在外接程序的类库输出类型中甚至看不到。

该问题中的其他几个答案以及其他一些答案都与32位和64位部署或依赖项之间的冲突有关。有些答案是针对IIS的,而其他答案并非如此,但总的来说,它们大多取决于确保您使用“任何CPU”作为平台目标,或者确保所有目标都针对x86目标。从一开始我就一直在使用“ Any CPU”,但是在Build设置中更改为任何目标,并且可用的配置都没有改变结果。可能是由于依赖关系的差异而导致体系结构目标受了责备,但我不知道如何解决它。

'Could not load file or assembly Windows.winmd'中的可接受答案建议通过在项目属性的“发布”区域中更改其“发布状态”来排除.winmd文件。但是,由于这是Office加载项,所以我实际上根本没有这样的按钮。

[另一个答案提到使用gacutil -i将其添加到GAC,但不适用于这些.winmd文件。

这不是我的专业领域,我不是该外接程序的原始作者,而我几乎不知道在.NET方面我正在做什么。任何帮助解决此问题将不胜感激!

c# .net vsto clickonce office-addins
1个回答
0
投票

我终于想通了。就我而言,我的依赖项之一是.NET Framework库,它本身依赖于(仅由同一供应商提供的)仅具有.NET Standard部署的库。

直接引用是为WinForms解决方案设计的,但是底层引用导致对所有这些WinRT包的引用,最终我的构建不允许这样做。或类似的东西。

无论如何,此解决方案对我有用。我向有问题的Microsoft.Windows.SDK.Contracts程序集添加了直接的程序包引用,但如下添加了<ExcludeAssets>元素以从我的项目中排除该程序包的所有资产。我的加载项中的任何内容实际上都不依赖于它们。

<PackageReference Include="Microsoft.Windows.SDK.Contracts">
  <Version>10.0.18362.2005</Version>
  <ExcludeAssets>all</ExcludeAssets>
</PackageReference>

一旦这样做,它就会编译而不会产生任何抱怨。

© www.soinside.com 2019 - 2024. All rights reserved.