none
未能加载文件或程序集“SQLDAL”或它的某一个依赖项。系统找不到指定的文件。 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    using System.Reflection;
    using System.Configuration;
    using IDAL;
    
    namespace DALFactory
    {
        sealed public class DataAccess
        {
            //读取配置文件中配置的程序集名称
            private static readonly string AssemblyName = ConfigurationManager.AppSettings["DAL"];
    
            public static IAdmins CreateAdmin()
            {
                //类名称
                string className = AssemblyName + ".Admins";
                //创建对象,并进行类型转换
                return (IAdmins)Assembly.Load(AssemblyName).CreateInstance(className);
            }
    
            public static IBike CreateBike()
            {
                //类名称
                string className = AssemblyName + ".Bike";
                //创建对象,并进行类型转换
                return (IBike)Assembly.Load(AssemblyName).CreateInstance(className);
            }
    
            
        }
    }
    

    <?xml version="1.0" encoding="utf-8" ?>
    <configuration>
        <startup> 
            <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
        </startup>
        <connectionStrings>
          <add name="ConnectionString"
               connectionString="Data Source=(localdb)\Projects;Initial Catalog=QRBIKE;Integrated Security=True;Connect Timeout=30;Encrypt=False;TrustServerCertificate=False"
               providerName="System.Data.SqlClient" />
        </connectionStrings>
        <appSettings>
          <add key="DbPath" value="C:\Users\Kingsun\AppData\Local\Microsoft\VisualStudio\SSDT\QRBIKE.mdf"/>
          <add key="DAL" value="SQLDAL" />
        </appSettings>
    </configuration>

    System.IO.FileNotFoundException was unhandled
      HResult=-2147024894
      Message=未能加载文件或程序集“SQLDAL”或它的某一个依赖项。系统找不到指定的文件。
      Source=mscorlib
      FileName=SQLDAL
      FusionLog==== 预绑定状态信息 ===
    日志: DisplayName = SQLDAL
     (Partial)
    警告: 为程序集提供了部分绑定信息:
    警告: 程序集名称: SQLDAL | 域 ID: 1
    警告: 当仅提供程序集显示名称的一部分时,将发生部分绑定。
    警告: 这可能导致联编程序加载错误的程序集。
    警告: 建议为程序集提供完全指定的文字标识,
    警告: 并由简单名称、版本、区域性和公钥标记组成。
    警告: 有关此问题的详细信息和常见解决方案,请参见白皮书 http://go.microsoft.com/fwlink/?LinkId=109270。
    日志: Appbase = file:///e:/DOCUMENT/Visual Studio 2013/Projects/BikeManager/BikeManager/bin/x86/Debug/
    日志: 初始 PrivatePath = NULL
    调用程序集: DALFactory, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null。
    ===
    日志: 此绑定从 default 加载上下文开始。
    日志: 正在使用应用程序配置文件: e:\DOCUMENT\Visual Studio 2013\Projects\BikeManager\BikeManager\bin\x86\Debug\BikeManager.vshost.exe.Config
    日志: 使用主机配置文件: 
    日志: 使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 的计算机配置文件。
    日志: 此时没有为引用应用策略(私有、自定义、分部或基于位置的程序集绑定)。
    日志: 尝试下载新的 URL file:///e:/DOCUMENT/Visual Studio 2013/Projects/BikeManager/BikeManager/bin/x86/Debug/SQLDAL.DLL。
    日志: 尝试下载新的 URL file:///e:/DOCUMENT/Visual Studio 2013/Projects/BikeManager/BikeManager/bin/x86/Debug/SQLDAL/SQLDAL.DLL。
    日志: 尝试下载新的 URL file:///e:/DOCUMENT/Visual Studio 2013/Projects/BikeManager/BikeManager/bin/x86/Debug/SQLDAL.EXE。
    日志: 尝试下载新的 URL file:///e:/DOCUMENT/Visual Studio 2013/Projects/BikeManager/BikeManager/bin/x86/Debug/SQLDAL/SQLDAL.EXE。

      StackTrace:
           在 System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
           在 System.Reflection.RuntimeAssembly.nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
           在 System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks)
           在 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection)
           在 System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
           在 System.Reflection.Assembly.Load(String assemblyString)
           在 DALFactory.DataAccess.CreateAdmin() 位置 e:\DOCUMENT\Visual Studio 2013\Projects\BikeManager\DALFactory\DataAccess.cs:行号 23
           在 BLL.Admins..ctor() 位置 e:\DOCUMENT\Visual Studio 2013\Projects\BikeManager\BLL\Admins.cs:行号 11
           在 BikeManager.Login.button1_Click(Object sender, EventArgs e) 位置 e:\DOCUMENT\Visual Studio 2013\Projects\BikeManager\BikeManager\Login.cs:行号 40
           在 System.Windows.Forms.Control.OnClick(EventArgs e)
           在 System.Windows.Forms.Button.OnClick(EventArgs e)
           在 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
           在 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
           在 System.Windows.Forms.Control.WndProc(Message& m)
           在 System.Windows.Forms.ButtonBase.WndProc(Message& m)
           在 System.Windows.Forms.Button.WndProc(Message& m)
           在 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
           在 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
           在 System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
           在 System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
           在 System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
           在 System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
           在 System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
           在 System.Windows.Forms.Application.Run(Form mainForm)
           在 BikeManager.Program.Main() 位置 e:\DOCUMENT\Visual Studio 2013\Projects\BikeManager\BikeManager\Program.cs:行号 19
           在 System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
           在 System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
           在 Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
           在 System.Threading.ThreadHelper.ThreadStart_Context(Object state)
           在 System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
           在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
           在 System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
           在 System.Threading.ThreadHelper.ThreadStart()
      InnerException: 

    2013年12月7日 7:39

答案

  • 你好:

    欢迎来到MSDN中文论坛。

    建议按照以下步骤来处理你的问题:

    1. 检查是否SQLDAL.DLL这个程序集文件是否存在,是否在Debug目录下(如果你是在Debug模式下调试)。或者看看是否是配置文件中的名称和实际的dll的名称不对应。

    2. 你使用的是Assembly.Load方法,这个方法接收的字符串参数是这个程序集名称的长名称,例如:SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3

    而不是简单的“SampleAssembly”,所以请尝试一下使用长名称,关于如何获取这个长名称,请参考MSDN文档:程序集名称如何:确定程序集的完全限定名

    3. 使用Assembly.LoadFrom方法,例如:

    Assembly assembly = Assembly.LoadFrom("MyNice.dll");
    Type type = assembly.GetType("MyType");
    object instanceOfMyType = Activator.CreateInstance(type);


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月9日 8:13
    版主

全部回复

  • 你好:

    欢迎来到MSDN中文论坛。

    建议按照以下步骤来处理你的问题:

    1. 检查是否SQLDAL.DLL这个程序集文件是否存在,是否在Debug目录下(如果你是在Debug模式下调试)。或者看看是否是配置文件中的名称和实际的dll的名称不对应。

    2. 你使用的是Assembly.Load方法,这个方法接收的字符串参数是这个程序集名称的长名称,例如:SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3

    而不是简单的“SampleAssembly”,所以请尝试一下使用长名称,关于如何获取这个长名称,请参考MSDN文档:程序集名称如何:确定程序集的完全限定名

    3. 使用Assembly.LoadFrom方法,例如:

    Assembly assembly = Assembly.LoadFrom("MyNice.dll");
    Type type = assembly.GetType("MyType");
    object instanceOfMyType = Activator.CreateInstance(type);


    We are trying to better understand customer views on social support experience, so your participation in this interview project would be greatly appreciated if you have time. Thanks for helping make community forums a great place.
    Click HERE to participate the survey.

    2013年12月9日 8:13
    版主
  • Cailen Zhong,我也遇到相同的问题,我是做了一个基础A.dll,有另外的B.dll引用了A.dll,

    在使用的时候是C.dll反射使用A.dll和B.dll,

    现在问题是这样的,若是A.dll编译了新版本,B.dll必须引用新的A.dll重新编译一个新版本才可以,

    不然就在反射B.dll的时候提示:未能加载文件或程序集“A.dll”或它的某一个依赖项。系统找不到指定的文件。

    我反射的时候是:

    System.Reflection.Assembly myAss = System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(_DllPath, dllFileName));
    Type t = myAss.GetType(ctrlFullName);
    //object obj = t.Assembly.CreateInstance(ctrlFullName);   //出错点在这行
    object obj = Activator.CreateInstance(t);                         //改成这样依然出错

    能帮帮我吗,A.dll更新特别频繁导致每次都很麻烦

    2015年1月31日 10:46
  • 你好:

    欢迎来到MSDN中文论坛。

    建议按照以下步骤来处理你的问题:

    1. 检查是否SQLDAL.DLL这个程序集文件是否存在,是否在Debug目录下(如果你是在Debug模式下调试)。或者看看是否是配置文件中的名称和实际的dll的名称不对应。

    2. 你使用的是Assembly.Load方法,这个方法接收的字符串参数是这个程序集名称的长名称,例如:SampleAssembly, Version=1.0.2004.0, Culture=neutral, PublicKeyToken=8744b20f8da049e3

    而不是简单的“SampleAssembly”,所以请尝试一下使用长名称,关于如何获取这个长名称,请参考MSDN文档:

    3. 使用Assembly.LoadFrom方法,例如:

    Assembly assembly = Assembly.LoadFrom("MyNice.dll");
    Type type = assembly.GetType("MyType");
    object instanceOfMyType = Activator.CreateInstance(type);



    Cailen Zhong,我也遇到相同的问题,我是做了一个基础A.dll,有另外的B.dll引用了A.dll,

    在使用的时候是C.dll反射使用A.dll和B.dll,

    现在问题是这样的,若是A.dll编译了新版本,B.dll必须引用新的A.dll重新编译一个新版本才可以,

    不然就在反射B.dll的时候提示:未能加载文件或程序集“A.dll”或它的某一个依赖项。系统找不到指定的文件。

    我反射的时候是:

    System.Reflection.Assembly myAss = System.Reflection.Assembly.LoadFrom(System.IO.Path.Combine(_DllPath, dllFileName));
    Type t = myAss.GetType(ctrlFullName);
    //object obj = t.Assembly.CreateInstance(ctrlFullName);   //出错点在这行
    object obj = Activator.CreateInstance(t);                         //改成这样依然出错

    能帮帮我吗,A.dll更新特别频繁导致每次都很麻烦


    2015年1月31日 10:50
  • 我是使用WPF开发的
    2015年2月1日 8:42
  • 我是使用wpf开发的
    2015年2月1日 8:42