错误消息“无法安装或运行应用程序。该应用程序需要在GAC中使用stole Version 7.0.3300.0”

时间:2009-02-17 19:24:58

标签: .net clickonce gac stdole

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

  

无法安装或运行该应用程序。该应用程序需要在GAC中使用stole Version 7.0.3300.0。

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

我们正在使用.NET 3.5,它已安装在此计算机上。

10 个答案:

答案 0 :(得分:66)

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

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

之后,您需要重新发布您的申请。

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

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

答案 1 :(得分:27)

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

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

所以在安装过程中似乎发生了一些事情,但这似乎纠正了这个问题。我希望能帮助其他人!

答案 2 :(得分:22)

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

注意: 在您应用此解决方案之前,请确保您已经(如我所做)检查了所有解决方案的项目,但没有找到的参考stdole.dll 程序集。

1 - 位于 stdole.dll 文件;

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

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

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

希望它有所帮助。

答案 3 :(得分:13)

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

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

然后我选择了选项:

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

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

我希望这可以帮到你:D

答案 4 :(得分:5)

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

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

然后修复了stdole.dll的问题。

我希望这可能有所帮助。

答案 5 :(得分:1)

好吧,您无法使用ClickOnce安装到GAC。这在this MSDN article中有记录。

答案 6 :(得分:1)

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

答案 7 :(得分:0)

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

答案 8 :(得分:0)

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

答案 9 :(得分:0)

到H2oRider - 您的应用程序是否访问GAC中的Oracle dll?我建议您这样做:将dll添加到项目中并将构建操作设置为“content”并将“copy to output directory”设置为“always always”。

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

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

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

相关问题