[C#] 動的にアセンブリをロードする
アプリケーション ドメインにおいて起動時に読み込まれない別のアセンブリ (.dll や .exe) を読み込む場合、System.Reflection.Assemby クラスの Load メソッドを使用します。この場合はアセンブリ名を指定しますが、特定の場所に保持しているファイルからアセンブリをロードする場合は、LoadFrom メソッドを使用します。下記のサンプルコードでは、予め、「MyLibrary」という名前空間に「MyBirthday」というクラスを実装した 「MyLibrary.dll」がアプリケーション フォルダに配備されているものとします。また、この MyBirthDay クラスには 「CalcDaysFromBirthDate」という DateTime を引数にする void 型のメソッドが実装されているものとします。
MyLibrary.cs
using System;
using System.Text; namespace MyLibrary
{ public class MyBirthday { public void CalcDaysFromBirthDate(DateTime birthDate) { StringBuilder sb = new StringBuilder(); sb.Append("あなたの誕生日は "); sb.Append(birthDate.ToShortDateString()); sb.Append(" です。"); sb.Append("誕生日から "); sb.Append(DateTime.Today.Subtract(birthDate).Days); sb.Append(" 日経過しています。"); Console.WriteLine(sb.ToString()); } } }
上記のアセンブリを読み込んだサンプル コードは下記の通りです。
using System;
using System.IO;
using System.Reflection; namespace CodeRecipe_LoadAssembly_CS
{ class Program { static void Main(string[] args) { DateTime birthDate; Console.Write(@"誕生日を入力してください (yyyy/MM/dd):"); while (!DateTime.TryParse(Console.ReadLine(), out birthDate)) { Console.Write("入力が正しくありません。再度入力してください (yyyy/MM/dd):"); } try { Assembly asm = Assembly.Load("MyLibrary"); Type myType = asm.GetType("MyLibrary.MyBirthday"); MethodInfo myMethod = myType.GetMethod("CalcDaysFromBirthDate"); object obj = Activator.CreateInstance(myType); myMethod.Invoke(obj, new object[] { birthDate }); } catch (Exception e) { Console.WriteLine(e); } Console.ReadLine(); } } }
このコードでは Assembly クラスの静的メソッドである Load メソッドを使用し、アセンブリをロードしています。また、GetType メソッドにて型を取得した後、Type.GetMethod メソッドを使用することで MyBirthdaty.CalcDaysFromBirthDate メソッドの情報を取得しています。
Assembly asm = Assembly.Load("MyLibrary");
Type myType = asm.GetType("MyLibrary.MyBirthday");
MethodInfo myMethod = myType.GetMethod("CalcDaysFromBirthDate");
更に、読み込んだアセンブリからオブジェクト インスタンスを Activator.CreateInstance メソッドにより作成し、MethodInfo.Invoke メソッドを用いることでオブジェクト、メソッドに必要な引数を設定しています。
object obj = Activator.CreateInstance(myType);
myMethod.Invoke(obj, new object[] { birthDate });
上記のサンプルコードの実行結果 (2010 年 5 月 25 日時点) は下記の通りです。
誕生日を入力してください(yyyy/MM/dd):1978/08/13
あなたの誕生日は 1978/08/13 です。誕生日から 11608 日経過しています。
[C#] 動的にアセンブリをロードする相关推荐
- 在SQL2000怎樣用動態實現SQL2005的nvarchar(max)功能
最近發現還有網友在提SQL2000的字符限制問題,以下舉一個例給大家參照: --動態建表: use Tempdb go if object_id('SP_CreateTable') is not nu ...
- [Tool] 使用CodeMaid自動程式排版 - 摘自网络
前言 「使用StyleCop驗證命名規則」這篇文章,指引開發人員透過StyleCop這個工具,來自動檢驗專案中產出的程式碼是否合乎命名規則. [Tool] 使用StyleCop驗證命名規則 但是在專案 ...
- (iOS)从0到Double系列 如何刻出一个可拖动的导航浮動按钮
本篇教程使用Swift 源碼:https://github.com/jamesdouble/JDJellyButton ,以下稱JDJellyButton 0)何謂導航浮動按鈕 当你的应用开发到一定程 ...
- 【Vegas原创】“無法解析 equal to 動作的定序衝突”错误的处理
错误:無法解析 equal to 動作的定序衝突. COLLATE Chinese_Taiwan_Stroke_CI_AS 用法: select @EMP_ID=emp_id from am_empl ...
- tankwar java,TankWar 單機(JAVA版) 版本0.4~版本0.6 讓坦克動起來
版本0.4的項目要求是讓坦克動起來 由於在版本0.6也是讓坦克聽從我們指揮 等會再寫 在這里主要是建立一個屏幕刷新線程 使屏幕達到時時刷新的效果 代碼如下: public class update ...
- LAMP 啟動 WWW 服務與測試 PHP 模組
OK!最單純簡易的 WWW 伺服器設定搞定的差不多了,接下來就是要啟動啦!啟動的方法簡單到不行,用傳統的方式來處理: [root@www ~]# [root@www ~]# [root@www ~]# ...
- Oracle啟動模式關閉模式
Oracle啟動數據庫 1.启动SQL*PLUS不与数据库连接 SQLPLUS /NOLOG 2.以SYSDBA角色与Oracle连接 CONNECT username/password ...
- groovy oracle数据库,使用Groovy /搖籃到用什麼驅動程序連接到Oracle數據庫
compile 'org.postgresql:postgresql:9.3-1102-jdbc41' compile 'mysql:mysql-connector-java:5.1.31' comp ...
- php 判定pc端與移動端
1.親測有效 2.上代買 //判斷移動端,pc端/*移动端判断*/public static function isMobile(){ // 如果有HTTP_X_WAP_PROFILE则一定是移动设备 ...
- 以非root 用戶安裝並啟動高級單服務器版
WebSphere Application Server,高級單服務器4.0 版可以在Red Hat Linux 7.1 與SuSE Linux 7.1 上運行.根據您的發行版本(distributi ...
最新文章
- ajax校验的优点,django框架中ajax的使用及避开CSRF 验证的方式详解
- 电商库存设计mysql redis_基于redis实现的扣减库存
- Kotlin入门(3)基本变量类型的用法
- Chrome 跨域调试
- error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
- VMWaer克隆centos后网络的问题解决
- 【递归,Java从入门到精通第五版pdf百度云
- 模块化存储区域网络(SAN)解决方案的全球与中国市场2022-2028年:技术、参与者、趋势、市场规模及占有率研究报告
- 喜欢的抖音视频只能收藏,不能保存?一篇文章教会你使用Python下载抖音无水印视频
- 网易面试总结——面试案例9~面试案例12
- ipad pro + zotero + 坚果云 + PDF Expert 搭建多平台文献管理(自用备忘)
- ORACLE 仿照原表建表语法
- mysql8删除root用户,Window下如何恢复被删除的Mysql8.0.17 Root账户及密码
- 计算机组成原理简单模型机实验,CPU 与简单模型机设计实验
- 戴尔联手九大云计算伙伴成立云联盟:通吃混合云
- (转)操作系统实现多线程的几种模式
- win10+cuda10.0+pytorch安装
- android studio 引入vitamio,Android studio3.0导入vitamio结果报错,求大神看看问题怎么解决...
- css inherit(继承)和initial(初始值)
- bestcoder#86 T1~T3
热门文章
- win2008服务器维护费用,win2008 服务器安全检查步骤指引(日常维护说明)
- mybatis中association和collection的column传入多个参数值
- PHP使用http_build_query()构造URL字符串的方法(可将POST参数组转换拼接成GET请求链接)...
- 一次ajax请求返回状态为Cancled的记录
- [转载]虚拟机磁盘空间已满的发现和解决
- POJ 1003 Hangover
- 金蝶工业老单单据的相关表
- Kafka消息压缩与解压
- 一样入职的应届生工资不一样_为什么每月工资一样,但扣的个税不一样?
- python实现多表格合并_python 如何把两个表格数据,合并为一个呢?