复制local = false文件未找到异常问题

时间:2014-02-19 22:30:40

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

嗨,我知道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平台目标。

我不知道为什么我的应用程序找不到程序集。任何想法它发生了什么?

3 个答案:

答案 0 :(得分:2)

选项1

如果在参考文献中找不到,您可以告诉您的应用程序您将自己解决程序集。要做到这一点:

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

AppDomain.CurrentDomain.AssemblyResolve += CurrentDomain_AssemblyResolve;

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

您的解析器方法代码(这是您加载程序集的位置 - 请查看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>

答案 1 :(得分:1)

因此该文件不在GAC中,并且没有本地副本。你已经消除了它可以加载的唯一两个地方 - 我不知道为什么你期望这个工作。

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

答案 2 :(得分:0)

不知道你选对了项目类型,至于我,我发现我一开始选择了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等

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