无法加载文件或程序集'XXX,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一

时间:2016-05-06 21:24:37

标签: c#

我一直在尝试调试此错误:

  

System.IO.FileNotFoundException:无法加载文件或程序集“ClassLibrary1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null”或其依赖项之一。该系统找不到指定的文件。   文件名:'ClassLibrary1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null'

我看到很多解决方案并尝试所有解决方案。

我正在查看Fusion Viewer,我收到以下消息:

  

日志:此绑定在默认加载上下文中启动。   日志:使用应用程序配置文件:I:\ Projects \ ACE Explorer \ AceV_1Explorer \ AceExplorer \ AceExplorer \ bin \ Debug \ AceExplorer.exe.config   日志:使用主机配置文件:   日志:使用C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ config \ machine.config中的计算机配置文件。   日志:政策后参考:ClassLibrary1,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null   日志:GAC Lookup未成功。   日志:尝试下载新的URL文件:/// I:/ Projects / ACE Explorer / AceV_1Explorer / AceExplorer / AceExplorer / bin / Debug / ClassLibrary1.DLL。   日志:尝试下载新的URL文件:/// I:/ Projects / ACE Explorer / AceV_1Explorer / AceExplorer / AceExplorer / bin / Debug / ClassLibrary1 / ClassLibrary1.DLL。   日志:尝试下载新的URL文件:/// I:/ Projects / ACE Explorer / AceV_1Explorer / AceExplorer / AceExplorer / bin / Debug / ClassLibrary1.EXE。   日志:尝试下载新的URL文件:/// I:/ Projects / ACE Explorer / AceV_1Explorer / AceExplorer / AceExplorer / bin / Debug / ClassLibrary1 / ClassLibrary1.EXE。   日志:所有探测URL都已尝试失败。

我在目录中看到该文件,而目标框架对于所有使用x86的人来说都是4.0

找出什么是破碎的想法

更新 对困惑感到抱歉。在日志中,它是PublicKeyToken = null。我正在尝试一切。

更新 我在主程序中添加了一些代码,它们将使用ResolveEventHandler解析程序集。它起初没有用。但是,当我让程序在程序的开头加载那些外部程序集(LoadReferences())时,它确实有效。很奇怪,因为当我在开始LoadReferences()中加载它们时路径完全相同,然后当方法输入对触发CurrentDomain_AssemblyResolve的自定义汇编的引用时。空白路径解析为装配路径。正如您所看到的,在LoadReferences()中,我正在添加EntityFramework,这将导致相同的问题,即使我正在使用Nuget。

在Main()中我添加了:

AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
LoadReferences();



private static void LoadReferences()
        {
            Assembly  objExecutingAssemblies;
            objExecutingAssemblies = Assembly.GetExecutingAssembly();
            AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();
            Assembly asm;
            foreach (AssemblyName strAssmbName in arrReferencedAssmbNames)
            {
                if (strAssmbName.FullName.ToLower().Contains("[company].") || strAssmbName.FullName.ToLower().Contains("entityframework"))
                    asm = Assembly.LoadFrom(Path.Combine("", strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(","))+ ".dll"));


            }
            // these were also posing an issue
            asm = Assembly.LoadFrom(Path.Combine("", "EntityFramework.dll"));
            asm = Assembly.LoadFrom(Path.Combine("", "EntityFramework.SqlServer.dll"));


        }
        static System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
        {
            string assembliesDir = "";
            try
            {
                string dll = (args.Name.IndexOf(",") < 0 ? args.Name + ".dll" : args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll");
                Assembly asm = Assembly.LoadFrom(Path.Combine(assembliesDir, dll));
                return asm;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }

            return null;
        }

另外。不确定这是否有所不同,但它是一个完全信任的clickonce。

我们的台式机也非常封锁。

对于所有项目,平台也设置为x86。

1 个答案:

答案 0 :(得分:4)

  

file:/// I:/ Projects / ACE Explorer /.../ bin / Debug / ClassLibrary1.DLL。

这个问题需要通灵调试。要求Fusion解析I:驱动器上的路径。这通常是映射到文件服务器上的共享的驱动器号。经常这样麻烦。鉴于过分关注安全性,ACE可能是Access Control Entry的首字母缩写。这使得该计划可能会使用假冒来探索&#34;访问权限。这使得Fusion无法弄清I:驱动器可能引用的内容,驱动器映射是每用户设置。

在程序的早期工作正常,因为它仍然使用默认用户令牌运行。程序部署后工作正常,因为它现在有一个不依赖于驱动器号映射的稳定位置。

不确定推荐什么,我是“日内瓦程序员权利公约”的特许成员。这要求程序员可以在本地驱动器上创建和测试程序,并安装他们需要的调试工具,以找出他们的程序无法正常工作的原因。这是您的IT员工需要解决的问题。如果这可以让您控制您的开发机器,那么您就可以了。鉴于Google为映射驱动器上的&#34; .net调试项目返回的点击次数,可能会产生结果。查询。