【问题标题】:Copy local = false file not found exception issueCopy local = false file not found 异常问题
【发布时间】:2021-04-28 22:08:23
【问题描述】:

您好,我知道has been asked,但没有得到答复。 我想使用安装在 C:\Program files (x86)\Dummu_API.dll 上的 dll 时遇到问题

当我运行我的应用程序时,它会抛出异常:

无法加载文件或程序集“Dummy_API,Version=1.0.0.0,Culture=neutral,PublicKeyToken=null”或其依赖项之一。系统找不到指定的文件。

我的项目的引用为 Copy Local = false 和特定版本 = false。我的项目也是一个 x86 平台目标。

我不知道为什么我的应用找不到程序集。知道发生了什么吗?

【问题讨论】:

  • 如果它与可执行文件不在同一目录中且不在 GAC 中,您希望您的应用程序如何找到它?
  • 基本上你的意思是我不能从(例如)我的文档中引用一个 Dll,除非我将它安装到 GAC 中?如何在全局程序集缓存中安装 Dummy_API?
  • 使用您的应用程序部署 Dummy_API.dll 会更容易。要在 GAC 中安装 DLL,您需要使用命令行接触每台机器。

标签: c# .net reference filenotfoundexception copy-local


【解决方案1】:

选项 1

您可以告诉您的应用程序,如果在引用中找不到这些程序集,您将自己解决这些程序集。为此:

在您的应用程序主方法中附加程序集解析器:

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

确保您没有在 main 方法中使用动态解析的程序集。

您的解析器方法代码(这是您加载程序集的地方 - 查看 ResolveEventArgs 我刚刚硬编码了一个,但您可以在此处解析来自不同位置的各种程序集)

static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    return Assembly.LoadFile(@"C:\temp\ClassLibrary1.dll");
}

选项 2

将此添加到您的 app.config(仅适用于应用程序基目录的子文件夹)

<runtime>
  <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
     <probing privatePath="PathToMyAssemblies\" />
  </assemblyBinding>
</runtime>

【讨论】:

  • 它不起作用。这听起来可行,还有另一种方法可以指示我的程序在哪里搜索程序集?
  • 对不起 - 我刚刚读到这仅适用于应用程序基本目录的子目录
  • 嗯,谢谢你,这可能会有所帮助,因为我可以在其他目录上“复制本地”,这样我就可以隐藏我需要的众多 dll :) 不是解决方案,但它是一个解决方法跨度>
【解决方案2】:

所以文件不在 GAC 中,也没有本地副本。您已经消除了它可以加载的仅有的两个位置 - 我不知道您为什么期望它能够工作。

您需要设置 Copy Local=true 或将 Dummy_API.dll 安装到将运行您的代码的机器上的全局程序集缓存中。一个或另一个。

【讨论】:

  • 如何在全局程序集缓存中安装 Dummy_API?但基本上你的意思是,除非我将它安装到 GAC 中,否则我无法从(例如)我的文档中引用 Dll?
  • @user2510947 默认情况下,您的可执行文件将从 GAC、本地目录(例如 CopyLocal=true)或 lahsrah 的答案中配置的探测路径中探测程序集。它不会在机器的任何其他文件夹中搜索 Dummy_API.dll。
【解决方案3】:

不知道你选对了项目类型,至于我,一开始发现我选择的是dot net core type(console app)项目,后来我把项目转移到了dot net framework(console应用程序),它适用于我。

还有另一种快速方法可以检查您是否遇到与我相同的问题:

  1. 创建项目 app.config 并编译后,发现 .dll.config 而不是 .exe.config
  2. 引用选项卡替换为依赖项选项卡
  3. 项目属性框架选择只能是core x.x或net 5.0,不能是framework 3.0/4.0/4.5等。

只是一个提示或提示,希望有所帮助!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-03-22
    • 2019-06-10
    • 1970-01-01
    • 1970-01-01
    • 2021-02-17
    • 1970-01-01
    • 1970-01-01
    • 2018-08-22
    相关资源
    最近更新 更多