C# Assembly.Load

.Net技术 码拜 4年前 (2016-02-23) 374次浏览
工厂模式 中  用到 Assembly.Load 这个方法来加载 程序集
提示 本人没有找到
假如本人用 接口 那个 程序集 就可以找到
使用 实现接口 的那个程序集 就提示本人找不到

using Hairdressing.IDAL.Sys  ;
using System.Reflection;
namespace Hairdressing.DALFactory
{
    public class DataAccessFactory
    {
        private static readonly string dbType = "Hairdressing.SqlServerDAL";
        #region 系统管理
        /// <summary>
        /// 创建用户信息
        /// </summary>
        /// <returns></returns>
        public static IUserInfoService CreateUserInfoService() 
        {
            string className = dbType + ".Sys.UsersInfoService";
            return (IUserInfoService)Assembly.Load(dbType).CreateInstance(className);
        }
        #endregion 
    }
}

以上是工厂类的方法
C# Assembly.Load
图片是项目的截图
为什么 加载 dal 层 的 程序集 不能加载
名称什么的也没错  就是提示本人  filenotfound 异常 没有找到文件

解决方案

10

Assembly.Load(assemblyName);
assemblyName:程序集名称的长格式。
msdn 示例 https://msdn.microsoft.com/zh-cn/library/ky3942xh(v=vs.110).aspx

string longName = "system, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089";
Assembly assem = Assembly.Load(longName);

10

你直接使用 Hairdressing.SqlServerDAL 中的某个类,能否访问?

10

当然假如你直接使用 Hairdressing.SqlServerDAL 中的某个类结果根本编译时就错误,那么可以查一下引用。假如你根本没有引用,而又想 Load,那么你应该查一下你的编译“配置管理器”当中有没有真正(打勾)去生成dll文件。假如配置生成,那么目标文件生成到哪里了?
不过你这种解决方案,应该直接引用 Hairdressing.SqlServerDAL。根本不用动态加载它。

10

能否 “Hairdressing.SqlServerDAL” 还引用了其他程序集,需要复制到当前目录下?

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明C# Assembly.Load
喜欢 (0)
[1034331897@qq.com]
分享 (0)