简体   繁体   English

无法加载文件或程序集或其依赖项之一。该系统找不到指定的文件

[英]Could not load file or assembly or one of its dependencies. The system cannot find the file specified

I have a code like this 我有这样的代码

public static Type ToType(XmlSerializableType xmlSerializableType)
{
  string func = "XmlSerialzationType.ToType";
  Type type = null;
  if (xmlSerializableType != null && xmlSerializableType.Name != string.Empty)
  {
    type = Type.GetType(xmlSerializableType.Name);
    if (type == null)
    {
      // May be a user defined class
      try
      {
        Assembly assembly = Assembly.Load(xmlSerializableType.AssemblyName);
        type = assembly.GetType(xmlSerializableType.Name);
      }
      catch (Exception ex)
      {
        TestDebug.DebugTraceSevere(func, "Exception " + ex.ToString());
      }
    }
  }
  return type;
}

I have a base class named "leaf" and a userdefinedclass named "roundedtree" when ' xmlSerializableType.Name ' becomes userdefined class '_rounded_tree', first time i am getting value for 'assembly as _rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a nd so for ' type as {Name = "_rounded_tree" FullName = "_rounded_tree"}'. 当' xmlSerializableType.Name '成为用户定义的类'_rounded_tree'时,我有一个名为“leaf”的基类和一个名为“roundedtree”的用户定义类,第一次得到'assembly as _rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' a所以' type为{Name =“_ ground_tree”FullName =“_ ground_tree”}'。 But after saving if i restart my application i cannot load value for 'assembly' getting exception ' Could not load file or assembly '_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. 但保存后,如果我重新启动我的应用程序,我无法加载“程序集”获取异常' 无法加载文件或程序集'_rounded_treeGOLD,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null'或其依赖项之一的值。 The system cannot find the file specified.":"_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null ' and return type becomes null this should not happen 系统找不到指定的文件。“:”_ rounded_treeGOLD,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = null '并且返回类型变为null这不应该发生

For baseclass "leaf" no issuses i will get xmlSerializableType.Name as " Root.Systemmodel.leaf" and 'type' becomes {Name = "leaf" FullName = "Root.Systemmodel.leaf"} assembly will be Root.Systemmodel, Version=8.0.7.0, Culture=neutral, PublicKeyToken=83bd062a94e26d58 What should i do in these circumstances This is a bit of code which will generate assembly for userdefined class 对于基类“leaf”没有发布,我将获得xmlSerializableType.Name作为“Root.Systemmodel.leaf”并且'type'变为{Name =“leaf”FullName =“Root.Systemmodel.leaf”}程序集将是Root.Systemmodel,Version = 8.0.7.0,Culture = neutral,PublicKeyToken = 83bd062a94e26d58在这些情况下我该怎么办这是一些会为用户定义的类生成程序集的代码

public Type CreateType()
      {
         string func = "ManagedClass.CreateType";

         // Create instances of AssemblyBuilder and ModuleBuilder for the new Type
         AppDomain myDomain = Thread.GetDomain();
         AssemblyName myAsmName = new AssemblyName();

         // Create the assembly name by appending the machine name to the typename.
         myAsmName.Name = this.TypeName + Environment.MachineName;
         // Define assembly that can be executed but not saved
         this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName, AssemblyBuilderAccess.Run);
         // Create dynamic module with symbol information
         this.UserClassModuleBuilder = this.UserClassAssemblyBuilder.DefineDynamicModule("userdefinedmodule", true);

UPDATE UPDATE

probably my assembly is creating for userdefined class but not saving that may be the reason i am not facing any issue first time, once i close the application i will lose that one see my code 可能我的程序集是为用户定义的类创建但不保存可能是我第一次没有遇到任何问题的原因,一旦我关闭应用程序我会失去那个看到我的代码

// Define assembly that can be executed but not saved
         this.UserClassAssemblyBuilder = myDomain.DefineDynamicAssembly(myAsmName,

AssemblyBuilderAccess.Run); how to overcome this situation 如何克服这种情况

UPDATE Here my database is xml files. 更新这里我的数据库是xml文件。 When i checked for base class leaf i can see the entry is <Name>Root.Systemmodel.WindowsSystem</Name><AssemblyName>Root.Systemmodel, Version=8.0.7.0, Culture=neutral, PublicKeyToken=83bd062a94e26d58</AssemblyName> in this case if restart my application no issues, but for user defined class "roundedtree" xml entry is <Name>_rounded_tree</Name> <AssemblyName>_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</AssemblyName> Here first time no issues, but if i restart my application i am getting exception 当我检查基类叶时,我可以看到该条目是<Name>Root.Systemmodel.WindowsSystem</Name><AssemblyName>Root.Systemmodel, Version=8.0.7.0, Culture=neutral, PublicKeyToken=83bd062a94e26d58</AssemblyName> in这种情况如果重启我的应用程序没有问题,但对于用户定义的类“roundedtree”xml条目是<Name>_rounded_tree</Name> <AssemblyName>_rounded_treeGOLD, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null</AssemblyName>这里第一次没有问题,但如果我重新启动我的应用程序我会得到例外

it happens because maybe the assembly you're going to load references to the another assembly that not exist in the same directory or system directory put all assembly in same folder I,ve just copy paste my code but its clear 它发生的原因可能是你要加载对不存在于同一目录或系统目录中的另一个程序集的程序集将所有程序集放在同一个文件夹中我只需复制粘贴我的代码但它清晰

private string asmBase;
public Type[] GetAllTypeinAssembly(string assemblyName)
{
    asmBase = System.IO.Path.GetDirectoryName(assemblyName);

    AppDomain.CurrentDomain.AssemblyResolve += new ResolveEventHandler(CurrentDomain_AssemblyResolve);
    System.Reflection.Assembly asm = System.Reflection.Assembly.Load(System.IO.File.ReadAllBytes(assemblyName));//domain.Load(bt) ;// 

    return asm.GetTypes();
}


private Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
{
    //This handler is called only when the common language runtime tries to bind to the assembly and fails.

    //Retrieve the list of referenced assemblies in an array of AssemblyName.
    Assembly MyAssembly, objExecutingAssemblies;
    string strTempAssmbPath = "";
    objExecutingAssemblies = args.RequestingAssembly;
    AssemblyName[] arrReferencedAssmbNames = objExecutingAssemblies.GetReferencedAssemblies();

    //Loop through the array of referenced assembly names.
    foreach (AssemblyName strAssmbName in arrReferencedAssmbNames)
    {
        //Check for the assembly names that have raised the "AssemblyResolve" event.
        if (strAssmbName.FullName.Substring(0, strAssmbName.FullName.IndexOf(",")) == args.Name.Substring(0, args.Name.IndexOf(",")))
        {
            //Build the path of the assembly from where it has to be loaded.                
            strTempAssmbPath = asmBase + "\\" + args.Name.Substring(0, args.Name.IndexOf(",")) + ".dll";
            break;
        }

    }
    //Load the assembly from the specified path.                    
    MyAssembly = Assembly.LoadFrom(strTempAssmbPath);

    //Return the loaded assembly.
    return MyAssembly;
}

I had the same issue, if you are working on SharePoint, sometime the references might not get bundled in WSP so, while deploying, these referenced dlls will not be deployed. 我有同样的问题,如果您正在使用SharePoint,有时引用可能不会捆绑在WSP中,因此,在部署时,这些引用的dll将不会被部署。 Resolution is to manually these from the GAC or force these into WSPs or copy them to the local bin. 解决方案是从GAC手动执行这些操作或将其强制转换为WSP或将其复制到本地bin。 The last one solved for me. 最后一个为我解决了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 无法加载文件或程序集的“扩展名”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'Extensions' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集“ Ajax”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'Ajax' or one of its dependencies. The system cannot find the file specified 具体:无法加载文件或程序集“xxxx”或其依赖项之一。 该系统找不到指定的文件 - A specific: Could not load file or assembly 'xxxx' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集“ XXX”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'XXX' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集或其依赖项之一。 该系统找不到指定的文件。 (不允许GAC) - Could not load file or assembly or one of its dependencies. The system cannot find the file specified. (No GAC allowed) 无法加载文件或程序集“ServiceStack”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'ServiceStack' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集“Logging.SNLLoggingStandard3”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'Logging.SNLLoggingStandard3' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集“Elmah”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly 'Elmah' or one of its dependencies. The system cannot find the file specified 无法加载文件或程序集“路径”或其依赖项之一。 该系统找不到指定的文件 - Could not load file or assembly "path" or one of its dependencies. The system cannot find the file specified XamlParseException:无法加载文件或程序集“ ResourceLibrary,...”或其依赖项之一。 该系统找不到指定的文件 - XamlParseException: Could not load file or assembly 'ResourceLibrary, …' or one of its dependencies. The system cannot find the file specified
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM