第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定

c# 利用反射加載dll(dll可實(shí)時(shí)更新不必關(guān)閉程序)

標(biāo)簽:
C# .NET

    最近做一个项目需要程序动态的加载执行dll,这个dll需要从远程服务器上下载最新版本,当本地版本低于远程服务器上的版本就下载dll,然后程序加载最新的dll。在写代码过程中遇到了一个问题,当程序执行了一遍dll后,再次执行的时候,发现服务器上有新版本,那么就删除本地的dll,这个时候就报错写保持,原因是执行第一遍的时候已经将dll加载到项目中,这个时候这个文件就被写保护了,所以删除的时候就会报错。查询网上有的用appDomain,但本人内功不深厚没有试验成功,总是提示有依赖没有加载上,还好条条大路通罗马,最终在使用反射加载dll的时候不使用LoadFile(FilePath),该成使用LoadFile(File.ReadAllBytes(FilePath))的方式反射就可以了,原因应该文件以二进制读取后读到了内存在,在内存中执行dll方法与文件无关了,所以再次下载删除dll时就不会有写保护了。代码如下:

// 动态加载刚下载的dll

 string assemblyPath = Directory.GetCurrentDirectory();

if(File.Exists(assemblyPath + @"\Math.dll"))

{

         File.Delete(assemblyPath + @"\Math.dll");

 }

File.Copy(@"F:\book\practiceG\CheckXml\Math\bin\Debug\netstandard1.4\Math.dll", assemblyPath + @"\Math.dll");

Assembly assem = Assembly.Load(System.IO.File.ReadAllBytes(assemblyPath + @"\Math.dll"))

Type ty = assem.GetType("Math");

 // 获取不带参数的构造函数

ConstructorInfo magicConstructor = ty.GetConstructor(Type.EmptyTypes);

// 这里是获取一个类似于类的实例的东东

object magicClassObject = magicConstructor.Invoke(new object[] { });

 MethodInfo mi = ty.GetMethod("Add");

object result = mi.Invoke(magicClassObject, new object[] { 1,2 });

MessageBox.Show(Convert.ToInt32(result).ToString());

    希望给遇到同样问题的同仁有参考意义,同时appDomain还需要继续研究一下。


點(diǎn)擊查看更多內(nèi)容
1人點(diǎn)贊

若覺得本文不錯(cuò),就分享一下吧!

評(píng)論

作者其他優(yōu)質(zhì)文章

正在加載中
感謝您的支持,我會(huì)繼續(xù)努力的~
掃碼打賞,你說多少就多少
贊賞金額會(huì)直接到老師賬戶
支付方式
打開微信掃一掃,即可進(jìn)行掃碼打賞哦
今天注冊(cè)有機(jī)會(huì)得

100積分直接送

付費(fèi)專欄免費(fèi)學(xué)

大額優(yōu)惠券免費(fèi)領(lǐng)

立即參與 放棄機(jī)會(huì)
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)

舉報(bào)

0/150
提交
取消