Assembly.Load()出错

本文探讨了在使用反射机制时遇到的Assembly.Load报错问题,并分析了两种常见原因:程序集名称错误及DLL文件缺失。提供了检查命名空间和管理DLL文件的具体解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在研究一段关于反射的代码时,Assembly.Load(程序集名称)总是报错,未找到文件,

出错原因目前发现两个:

1、程序集名称不对,后面的命名空间也有可能不对,需要从属性里查看并按需修改;

2、在使用反射时,由于加载的项目比较多,未对生成的dll进行统一管理和存放,导致U层下的bin/debug下没有相应的dll文件,此时需要修改dll生成路径或者将相应的dll拷入U层bin/debug路径下

转载于:https://www.cnblogs.com/zly24432/p/5364762.html

using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.EditorInput; using Autodesk.AutoCAD.Runtime; using System; using System.IO; using System.Linq; using System.Reflection; [assembly: ExtensionApplication(typeof(ZhongLi.CoreLoader))] [assembly: CommandClass(typeof(ZhongLi.CoreLoader))] namespace ZhongLi { public class CoreLoader : IExtensionApplication { private static bool _isInitialized = false; private static readonly string[] RequiredModules = { "BW.dll", "bzxl.dll", "ktj.dll", "ljmtj.dll", "pkbz.dll", "pmxlg.dll", "tzcl.dll", "wodechajian.cuix" }; public void Initialize() { try { if (_isInitialized) return; _isInitialized = true; Document doc = Application.DocumentManager.MdiActiveDocument; Editor ed = doc.Editor; // 1. 解决天正冲突 DisableTArchAutoLoad(doc, ed); // 2. 加载所有模块 LoadModules(ed); // 3. 注册命令 RegisterCommands(ed); // 4. 加载自定义菜单 LoadCustomMenu(ed); ed.WriteMessage("\n忠利模架软件 V2.0 初始化完成! 输入ZL_HELP查看帮助"); } catch (System.Exception ex) // 明确指定System.Exception { Application.DocumentManager.MdiActiveDocument.Editor.WriteMessage( $"\n初始化失败: {ex.Message}\n{ex.StackTrace}"); } } public void Terminate() { // 清理资源 } private void DisableTArchAutoLoad(Document doc, Editor ed) { try { // 设置天正环境变量 Application.SetSystemVariable("TCH_STARTMODE", 0); Application.SetSystemVariable("TCH_INITMENU", 0); // 卸载天正模块 string[] tarchModules = { "tch_elevation", "tch_kernel" }; foreach (string module in tarchModules) { try { // 使用SendStringToExecute的正确方式 doc.SendStringToExecute($"(command \"arxunload\" \"{module}\")\n", true, false, true); ed.WriteMessage($"\n已卸载天正模块: {module}"); } catch (System.Exception ex) // 明确指定System.Exception { ed.WriteMessage($"\n卸载{module}失败: {ex.Message}"); } } // 等待卸载完成 System.Threading.Thread.Sleep(1000); } catch (System.Exception ex) // 明确指定System.Exception { ed.WriteMessage($"\n禁用天正失败: {ex.Message}"); } } private void LoadModules(Editor ed) { string pluginPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); foreach (string module in RequiredModules) { string modulePath = Path.Combine(pluginPath, module); try { if (File.Exists(modulePath)) { if (Path.GetExtension(module).Equals(".dll", StringComparison.OrdinalIgnoreCase)) { // 加载.NET程序集 Assembly.LoadFrom(modulePath); ed.WriteMessage($"\n已加载程序集: {module}"); } else if (Path.GetExtension(module).Equals(".cuix", StringComparison.OrdinalIgnoreCase)) { // 加载CUIX菜单 Application.MenuGroups.Load(modulePath); ed.WriteMessage($"\n已加载菜单: {module}"); } } else { ed.WriteMessage($"\n文件不存在: {module}"); } } catch (System.Exception ex) // 明确指定System.Exception { ed.WriteMessage($"\n加载失败: {module} - {ex.Message}"); } } } private void LoadCustomMenu(Editor ed) { try { string cuiFile = Path.Combine( Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location), "wodechajian.cuix"); if (File.Exists(cuiFile)) { // 加载主菜单 Application.MenuGroups.Load(cuiFile); // 设置工作空间 Application.SetSystemVariable("WSCURRENT", "忠利模架"); ed.WriteMessage("\n自定义菜单已加载"); } else { ed.WriteMessage("\n菜单文件未找到: wodechajian.cuix"); } } catch (System.Exception ex) // 明确指定System.Exception { ed.WriteMessage($"\n加载菜单失败: {ex.Message}"); } } private void RegisterCommands(Editor ed) { // 命令会自动注册 ed.WriteMessage("\n命令已注册: ZL_LOAD, ZL_HELP, ZL_INIT"); } [CommandMethod("ZL_HELP", CommandFlags.Modal)] public static void ShowHelp() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage("\n===== 忠利模架软件命令列表 ====="); ed.WriteMessage("\nZL_LOAD - 加载模架系统"); ed.WriteMessage("\nZL_HELLO - 测试命令"); ed.WriteMessage("\nZL_MENU - 显示自定义菜单"); ed.WriteMessage("\nZL_HELP - 显示帮助信息"); ed.WriteMessage("\nZL_INIT - 重新初始化插件"); ed.WriteMessage("\n==============================="); } [CommandMethod("ZL_INIT", CommandFlags.Modal)] public static void ForceInitialize() { new CoreLoader().Initialize(); } [CommandMethod("ZL_LOAD", CommandFlags.Modal)] public static void LoadFramework() { Editor ed = Application.DocumentManager.MdiActiveDocument.Editor; ed.WriteMessage("\n忠利模架系统正在启动..."); // 这里添加实际加载逻辑 } } } 核心加载器 (ZhongLi.CoreLoader.cs)出现的问题 CS1061“object"未包含"Load"的定义,并且找不到可接受第一个"object"类型参数的可访问扩展方法"Load"(是否缺少 using 指令或程序集引用?) CS1061“obiec“"未包含"Load"的定义,并且找不到可接受第一个"object"类型参数的可访问扩展方法"Load"(是否缺少 using 指令或程序集引用?
07-20
using CY_API; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using Model.cxbd; using Model.hospital_model; using Model.sys_model; using System.Reflection; namespace APP_API.Controllers.hController { [Route("api/[controller]")] [ApiController] [Authorize] [ApiExplorerSettings(GroupName = "base_data")] public class stautsController : BaseApiController { public stautsController(IFreeSql fsql) : base(fsql) { } /// <summary> /// 下拉 /// </summary> /// <param name="table_name"></param> /// <param name="colum_name"></param> /// <param name="search">名字关键字</param> /// <param name="public_query">筛选条件,例如:status:active;type:admin</param> /// <returns></returns> [HttpGet("select_one")] public IActionResult select(string table_name, string colum_name, string? search, int? take, string? public_query) { var assembly = Assembly.Load("sys_stauts"); var type = assembly.GetTypes().FirstOrDefault(e => e.Name.ToLower() == table_name.ToLower()); if (type == null) { throw new ServiceException("表名出错"); } var enums = enum_list.base_list(); // 解析 public_query 字符串 var publicQueryList = string.IsNullOrWhiteSpace(public_query) ? Array.Empty<(string Key, string Value)>() : public_query .Split(';', StringSplitOptions.RemoveEmptyEntries) .Select(pair => { var parts = pair.Split(':', 2, StringSplitOptions.RemoveEmptyEntries); if (parts.Length != 2) throw new ServiceException($"Invalid public_query format: {pair}"); return (Key: parts[0], Value: parts[1]); }) .ToArray(); var list = CommandHelp.GetSelect(type, enums, _fsql, colum_name, search, publicQueryList).ToList(); if (take.HasValue) { list = list.Take(take.Value).ToList(); } return Ok(list.GetRetEnumerable()); } /// <summary> /// 获取这个表格全部的下拉 /// </summary> /// <param name="table_name"></param> /// <param name="search"></param> /// <returns></returns> /// <exception cref="ServiceException"></exception> [HttpGet("select_all")] public IActionResult select(string table_name, string? search, int? take) { var assembly = Assembly.Load("v"); var type = assembly.GetTypes().FirstOrDefault(e => e.Name.ToLower() == table_name.ToLower()); if (type == null) { throw new ServiceException("表名出错"); } var enums = enum_list.base_list(); if (take.HasValue) { var data = CommandHelp.GetSelect(type, enums, _fsql, search).Take(take.Value).ToList(); return Ok(data.GetRetObject()); } else { var data = CommandHelp.GetSelect(type, enums, _fsql, search).ToList(); return Ok(data.GetRetObject()); } } /// <summary> /// 新增 /// </summary> /// <param name="m"></param> /// <returns></returns> [HttpPost] public IActionResult Insert([FromBody] sys_stauts m) { _fsql.Insert(m).Insert(); return this.ReturnOk(); } } } 如何写状态表的下拉
最新发布
08-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值