首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >GAC中的stdole.dll和微软的Nuget包有什么区别?

GAC中的stdole.dll和微软的Nuget包有什么区别?
EN

Stack Overflow用户
提问于 2021-05-25 20:58:47
回答 1查看 583关注 0票数 2

我工作的C#项目有一个程序集,其中引用了stdole.dll,它位于我的dev PC上,位于C:\WINDOWS\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll中。

我不知道这个集会最初是从哪里来的。我注意到有一个Nuget包提供了它:https://www.nuget.org/packages/stdole/17.0.0-previews-1-31314-256,尽管我们没有使用它。

我的程序集一直在使用先前存在的GAC文件;当我从GAC stdole引用切换到Nuget版本时,从我的CSPROJ中删除了以下内容:

代码语言:javascript
复制
<COMReference Include="stdole">
  <Guid>{00020430-0000-0000-C000-000000000046}</Guid>
  <VersionMajor>2</VersionMajor>
  <VersionMinor>0</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>primary</WrapperTool>
  <Isolated>False</Isolated>
  <EmbedInteropTypes>True</EmbedInteropTypes>
</COMReference>

取而代之的是:

代码语言:javascript
复制
    <Reference Include="Microsoft.VisualStudio.Interop, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\hap\Build\packages\Microsoft.VisualStudio.Interop.17.0.0-previews-1-31314-256\lib\net472\Microsoft.VisualStudio.Interop.dll</HintPath>
    </Reference>
    <Reference Include="netstandard" />

    <Reference Include="stdole, Version=17.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a, processorArchitecture=MSIL">
      <HintPath>..\..\..\hap\Build\packages\stdole.17.0.0-previews-1-31314-256\lib\net472\stdole.dll</HintPath>
    </Reference>

GAC文件有7.0.9466.1版本,Nuget包有17.0.31314.256

我认为最好使用Nuget源代码&确保我们分发它的依赖项,而不是仅仅引用我的系统上的某个DLL。,但我并不真正理解它们之间的区别(如果有的话)。

stdole包提供的链接没有一个是有用的。它们是:

  • 从VS:https://aka.ms/vsextensibility中的Nuget (它重定向到一个"Visual“页面,这个页面显然不相关&似乎更不用说stdole了)
  • 在Nuget 网站中,Release链接指向“VisualStudio2015Update2RelationNotes”,看起来也不相关

看来那些都是死胡同。

Misc /背景信息

该应用程序确实需要stdole,因为它与一些遗留的VB6代码进行接口,并且必须交换StdPicture对象。

出现这个问题是因为我的应用程序在一台PC上出现了以下错误

代码语言:javascript
复制
Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified.

此错误未发生在其他任何地方。正因为如此,我担心我们遗漏了一个应该安装的依赖项,也许幸运地存在于大多数个人电脑上,但不是全部。

EN

回答 1

Stack Overflow用户

发布于 2021-06-28 16:45:22

底线似乎是,什么可能是在当地的GAC和什么是在Nuget包是没有区别的。有各种版本的stdole.dll的Nuget包,大概也是GAC中的相同版本(这是我的经验)。

GAC DLL可能安装在那里(正如Alex .的评论中提到的那样)。安装Office或其他应用程序时。可用作主互操作程序集。 (PIA),如果它在GAC,那似乎是它的功能。

但是,如果它不在GAC中,那么任何依赖它的应用程序都会失败。因此,我的建议是改用Nuget包,并像部署任何其他依赖项一样部署stdole.dll。(除非您正在开发类似于Office外接程序的东西-其中基本上保证只有在Office依赖项出现时才能运行。)

上面的链接还提到了以下内容:

..。与所有Office 2003 PIA一样,开发人员不应该重新分发它们。

我认为这意味着您绝对不应该自己在GAC中安装stdole.dll或任何其他PIA。我不认为部署您自己的私人副本将是有害的,如果您运行在没有安装Office的个人电脑上,您将别无选择,如果您不能嵌入互操作类型

(我想您可以为OLE32.dll或其他任何东西创建您自己的互操作程序集,但我不认为有什么好的理由来代替使用微软的stdole.dll?)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67695533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档