【问题标题】:How to use interop.x.dll file in a C# project if the dll file is missing?如果缺少 dll 文件,如何在 C# 项目中使用 interop.x.dll 文件?
【发布时间】:2020-01-04 17:30:48
【问题描述】:

我是 C# 编程的菜鸟。 我目前正在尝试在 Visual Studio 中运行 C# 项目。在构建项目时,我找不到特定的程序集或目录文件。 在 .csproj 文件中,库的 com 目录存在:-

<COMReference Include="SREYELINKLib">
  <Guid>{F8FB49B9-9448-4045-BB1F-9DEA1F98B7E6}</Guid>
  <VersionMajor>1</VersionMajor>
  <VersionMinor>2</VersionMinor>
  <Lcid>0</Lcid>
  <WrapperTool>tlbimp</WrapperTool>
  <Isolated>False</Isolated>
</COMReference>

当我查看文件夹的 bin 时,我得到文件 Interop.SREYELINKLib.dll。 但是,项目中不存在 .dll 文件。 如何解决此编译错误?

【问题讨论】:

  • 在您的机器上搜索文件 SREYELINKLib。该文件需要在项目 bin 文件夹中,需要指定完整路径,或者您的环境变量 LIB 需要具有文件所在的位置。
  • 在我的项目 bin 文件夹中存在 interop.SREYELINKLib.dll 但不存在 SREYELINKLib.dll。另外,我的环境变量没有 LIB 变量。我正在使用 Windows 10。
  • 试试&lt;EmbedInteropTypes&gt;True&lt;/EmbedInteropTypes&gt;
  • 我尝试在 标签内添加 True;但是,它仍然显示相同的错误。我应该共享我的 git 项目吗?
  • SREYELINKLib dll 是否从某处导入?另外,在某些情况下,一些特殊的com引用只需要non embedding the interop types,项目就可以成功使用它。见this。在某些情况下,Embed interop types=true 方法有时会导致奇怪的方法。

标签: c# visual-studio msbuild


【解决方案1】:

当我查看文件夹的 bin 时,我得到了文件 互操作.SREYELINKLib.dll。但是,.dll 文件不存在于 项目。如何解决此编译错误?

SREYELINKLib 表示Interop.SREYELINKLib.dll。它们代表同一个文件。而Interop.SREYELINKLib.dll就是它的全名,如下图所示。所以遇到这种情况,不是报错,是正常的。

在构建项目时,我得到了一个特定的程序集或 找不到目录文件。在.csproj文件中,com目录 图书馆在场:-

首先,我认为您遇到了系统找不到特定com引用的构建错误。如果是这样:

从 Net 4.0 开始,微软在 VS 中添加了EmbedInteropTypes。而EmbedInteropTypes=true表示将DLL中使用的嵌入代码直接嵌入到项目输出文件中,相当于将com引用直接嵌入到project.dll或project.exe中,这样就不用输出com引用了,因此优化项目。

但在某些特殊情况下,由于某些原因嵌入互操作类型时,互操作层会失败。您的代码无法访问它们,只能手动添加它们(EmbedInteropTypes=False)。你可以看到this

所以请点击Solution Explorer中的SREYELINKLib,然后将Embed Interop Types设置为False。另外,请不要忘记将Copy Local 设置为True。要检查它,请打开 xxx.csproj 文件并确保您已添加 &lt;EmbedInteropTypes&gt;False&lt;/EmbedInteropTypes&gt;

另外,请在您的项目中使用Interop.SREYELINKLib.dll 而不是SREYELINKLib.dll

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-29
    • 2019-09-21
    • 2011-06-18
    相关资源
    最近更新 更多