56

当一个用户尝试运行应用程序时,我们的 ClickOnce 应用程序会报告:

无法安装或运行应用程序。该应用程序需要 GAC 中的 stdole 版本 7.0.3300.0。

有趣的是,GAC (C:\Windows\assembly) 中没有安装 stdole。我怎么把它弄到那里?

我们使用的是 .NET 3.5,它已安装在这台计算机上。

4

10 回答 10

67

尝试转到项目属性中的“发布”选项卡,然后选择“应用程序文件”按钮。然后设置以下属性:

  • stdole.dll 的文件名
  • 发布状态包含
  • 将组下载必需

之后,您需要重新发布您的应用程序。

如果引用的 CopyLocal=true,则引用将随应用程序一起发布。如果引用的 CopyLocal=false,则该引用将被标记为先决条件。这意味着在安装 ClickOnce 应用程序之前,必须将程序集安装在客户端的 GAC 中。

由于 Visual Studio 安装而不是 .NET Framework 安装,一些程序集安装到 GAC 中。这可能是你的情况。

于 2009-02-17T19:42:26.850 回答
28

所以事实证明 .NET 文件被复制到C:\Program Files\Microsoft.NET\Primary Interop Assemblies\. 但是,它们从未在GAC中注册。

我最终手动将文件拖入其中C:\Program Files\Microsoft.NET\Primary Interop AssembliesC:\windows\assembly并且该应用程序在该问题机器上运行。您也可以使用Gacutil以编程方式执行此操作。

因此,在安装过程中 .NET 似乎发生了一些事情,但这似乎可以解决问题。我希望这可以帮助别人!

于 2009-02-18T15:32:38.940 回答
22

我的情况是,我解决了这个问题,转到项目属性中的“发布”选项卡,然后选择“应用程序文件”按钮。然后只是:

注意: 在应用此解决方案之前,请确保您已经(像我一样)检查了您解决方案的所有项目,并且没有发现对stdole.dll程序集的引用。

1 - 位于stdole.dll文件;

2 - 将其发布状态更改为排除

3 - 之后,您需要重新发布您的应用程序

从 Visual Studio 2010 迁移后,此问题发生在 Visual Studio 2012 上。

希望能帮助到你。

于 2014-09-30T21:41:33.037 回答
13

我在 ClickOnce 部署中遇到了同样的问题。

我通过转到项目属性中的“发布”选项卡,然后选择“应用程序文件”按钮解决了这个问题。

然后我选择了以下选项:

  • “stdole.dll”的“文件名”
  • “发布状态”到“包括”和
  • “下载组”为“必需”。

这解决了我重新发布时的问题。

我希望这对你有帮助:D

于 2009-02-17T19:44:15.880 回答
5

我们在使用与 Microsoft Office 互操作的 ClickOnce 应用程序时遇到了同样的问题。它只发生在公司的几台电脑上。

我们发现的最佳解决方案是修改有问题的计算机上的 MS Office 安装(通过“程序和功能”面板)并确保“.NET 可编程性功能”(不确定组件的名称 - 我们的 Microsoft_Office 版本不是英文)为每个 MS Office 应用程序(Excel、Word、Outlook 等)安装。这似乎不包含在默认安装中。

然后解决了 stdole.dll 的问题。

我希望这可能会有所帮助。

于 2011-04-29T16:00:04.203 回答
1

好吧,您不能使用 ClickOnce 安装到 GAC。这在此 MSDN 文章中有记录。

于 2009-03-01T22:49:26.697 回答
1

我的解决方案:我在解决方案资源管理器中打开了引用文件夹(显示所有文件),并且对于安装抱怨的每个程序集(程序集的名称可能与程序集的文件名不完全相同 - 在对象资源管理器中,但是很容易弄清楚),我将Copy Local更改为True。我最终需要对每个与 Microsoft Office/ COM相关的程序集执行此操作。

于 2013-01-08T19:57:03.393 回答
0

检查您是否真的在使用 EnvDTE 参考。如果没有,请将其删除并重新编译。

于 2009-04-30T15:04:39.027 回答
0

有趣的是,我的项目中没有对 stdole 的任何引用,但我仍然有一个用户收到错误。我必须添加参考,然后将设置更改为包含。希望这会奏效。

于 2009-08-19T15:19:59.423 回答
0

对于 H2oRider——您的应用程序是否访问 GAC 中的 Oracle dll?我建议您这样做:将 dll 添加到您的项目中并将构建操作设置为“内容”并将“复制到输出目录”设置为“始终复制”。

然后删除您对 GAC 中 dll 的引用。重新添加引用,但这次深入到您刚刚添加到项目中的引用。

现在发布它。应用程序将在本地查找 dll,并且 dll 包含在部署中,因此它会找到它。

如果这不起作用,那么如果包含在本地而不是 GAC 中,则可能无法使用该 dll。这适用于某些程序集,例如 Office PIA。在这种情况下,部署它的唯一方法是将其包装在设置和部署包中,并使用 Bootstrapper Manifest Generator 将其转换为您可以使用 ClickOnce 部署发布的先决条件。

于 2011-03-29T06:26:26.463 回答