菜单

为C# as 类型转变及Assembly.LoadFrom埋坑!,

2019年8月21日 - Php

为C# as 类型调换及Assembly.LoadFrom埋坑!,

背景:

近来,笔者颁发了一个调节和测量检验工具:布告:.NET开采职员必备的可视化调节和测量检验工具(你值的具有)

成效是这么的:

图片 1

自此,有小一些客商反映,工具用持续(没影响或有至极)~~~

下一场,建议小部分客商换个Computer意况试试,有些就好了~~~

于是,作者要是是VS景况下的 Microsoft.VisualStudio.DebuggerVisualizers.dll 的本子不雷同引发的。

所以,一般自身都建议客商自身下载源码,重新引用去编绎一下!!!

背景:

前段时间,笔者宣布了三个调解工具:发表:.NET开垦人士必备的可视化调节和测量检验工具(你值的全部)

功效是这么的:

图片 2

从此未来,有小片段客户反映,工具用持续(没反应或有十分)~~~

然后,建议小一些客户换个Computer蒙受试试,某些就好了~~~

于是乎,作者只假使VS境况下的 Microsoft.VisualStudio.DebuggerVisualizers.dll 的版本不一致样引发的。

因此,一般笔者都提出客商本身下载源码,重新援引去编绎一下!!!

是因为该工具一贯在CSDN论坛的VB.NET版块置顶着。

出于该工具一贯在CSDN论坛的VB.NET版块置顶着。

虚构到受广大,中间还偷偷进级过几次,消除了抛卓殊的标题,然而仍未有从根本性化解~~~~

这两日,有个叫子寒的同窗,找上了自身,希望自个儿帮她化解这几个标题。

自身试器重新编绎了编绎发给她,都反馈木有功用。

不得不让他下载源码,并在他Computer上拓宽长距离调节和测量试验。

昨夜管理到上午1点半,终于:把开掘的三个坑给埋了!!!

上面介绍下那七个坑:

考虑到受广大,中间还偷偷进级过一次,化解了抛格外的标题,然而仍尚未从根特性化解~~~~

这两日,有个叫子寒的同桌,找上了笔者,希望笔者帮她化解那一个主题素材。

本身试器重新编绎了新本子发给他,都反馈木有效果。

只可以让她下载源码,并在他计算机上开展长途调节和测验。

明儿早上拍卖到凌晨1点半,终于:把开采的三个坑给埋了!!!

下边介绍下那多少个坑:

1:as 调换的坑:

先看一段源码,这是得到反体系化的结果,转Table,再绑定:

 protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            MDataTable dt = objectProvider.GetObject() as MDataTable;
            FormCreate.BindTable(windowService, dt, null);
        }

在这段代码中,调节和测验的结果:

1:objectProvider.GetObject() 拿到的对象是MDataTable,GetType也返回的CYQ.Data.Table.MDataTable。

2:as MDataTable 却返回了null ?

1:as 调换的坑:

先看一段源码,那是得到反体系化的结果,转Table,再绑定:

 protected override void Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
        {
            MDataTable dt = objectProvider.GetObject() as MDataTable;
            FormCreate.BindTable(windowService, dt, null);
        }

在这段代码中,调节和测量检验的结果:

1:objectProvider.GetObject() 拿到的对象是MDataTable,GetType也返回的CYQ.Data.Table.MDataTable。

2:as MDataTable 却返回了null ?

嗬?三个大大的问号在自己后边,同样的门类,怎么as不过去?

于是本人把代码改了弹指间:

MDataTable dt=(MDataTable)objectProvider.GetObject()

抛卓殊了:

************** 异常文本 **************
System.InvalidCastException: [A]CYQ.Data.Table.MDataTable 无法强制转换为 [B]CYQ.Data.Table.MDataTable。
类型 A 源自“CYQ.Data, Version=5.7.5.5, Culture=neutral, PublicKeyToken=null”(在字节数组的上下文“LoadNeither”中)。
类型 B 源自“CYQ.Data, Version=5.7.5.5, Culture=neutral, PublicKeyToken=null”(在上下文“LoadFrom”中的“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\CYQ.Data.dll”位置处)。
   在 CYQ.Visualizer.MDataTableVisualizer.Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
   在 Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)

其一极度是怎么样等会再说,先补充知识点先:

1:as 类型转换:只检测上下文中类型是否一致(或存在隐式转换),若失败返回null,不抛异常。

2:强制类型转换:尝试进行类型转换,转换失败时,抛出异常。

可以吗,第三个坑,同样的品种,未有拾叁分,埋的够深!!!

AS叫了:那坑不能够怪作者,要怪就怪Assembly.LoadFrom,什么人让你们把我们分隔在不一样的内外文中。

嘿?一个大大的问号在自个儿前面,同样的品种,怎么as但是去?

于是乎小编把代码改了瞬间:

MDataTable dt=(MDataTable)objectProvider.GetObject()

抛非凡了:

************** 异常文本 **************
System.InvalidCastException: [A]CYQ.Data.Table.MDataTable 无法强制转换为 [B]CYQ.Data.Table.MDataTable。
类型 A 源自“CYQ.Data, Version=5.7.5.5, Culture=neutral, PublicKeyToken=null”(在字节数组的上下文“LoadNeither”中)。
类型 B 源自“CYQ.Data, Version=5.7.5.5, Culture=neutral, PublicKeyToken=null”(在上下文“LoadFrom”中的“C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\Packages\Debugger\Visualizers\CYQ.Data.dll”位置处)。
   在 CYQ.Visualizer.MDataTableVisualizer.Show(IDialogVisualizerService windowService, IVisualizerObjectProvider objectProvider)
   在 Microsoft.VisualStudio.DebuggerVisualizers.DebugViewerShim.ManagedShim.DelegatedHost.CreateViewer(IntPtr hwnd, HostServicesHelper hsh, SafeProxyWrapper proxy)

以此丰富是什么等会再说,先添补知识点先:

1:as 类型转换:只检测上下文中类型是否一致(或存在隐式转换),若失败返回null,不抛异常。

2:强制类型转换:尝试进行类型转换,转换失败时,抛出异常。

好呢,第3个坑,一样的类别,未有极其,埋的够深!!!

AS叫了:那坑不能怪小编,要怪就怪Assembly.LoadFrom,何人让你们把大家分隔在区别的左右文中。

2:Assembly.LoadFrom 的坑

此处再贴一段详细的拾贰分音信:

图片 3图片 4

mscorlib
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll
----------------------------------------
Microsoft.VisualStudio.Platform.AppDomainManager
    程序集版本:12.0.0.0
    Win32 版本:12.0.21005.1
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Platform.AppDomainManager/v4.0_12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Platform.AppDomainManager.dll
----------------------------------------
System
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561934e089/System.dll
----------------------------------------
System.Xml
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561934e089/System.Xml.dll
----------------------------------------
System.Configuration
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
----------------------------------------
System.Windows.Forms
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561934e089/System.Windows.Forms.dll
----------------------------------------
System.Drawing
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll
----------------------------------------
Microsoft.VisualStudio.DebuggerVisualizers
    程序集版本:12.0.0.0
    Win32 版本:12.0.21005.1
    基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
----------------------------------------
CYQ.Visualizer
    程序集版本:2.0.0.5
    Win32 版本:2.0.0.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Visualizer.dll
----------------------------------------
CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:5.7.5.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Data.DLL
----------------------------------------
System.Data
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c561934e089/System.Data.dll
----------------------------------------
System.Core
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561934e089/System.Core.dll
----------------------------------------
CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:12.0.21005.1
    基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
----------------------------------------
System.Numerics
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561934e089/System.Numerics.dll
----------------------------------------
System.Transactions
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561934e089/System.Transactions.dll
----------------------------------------
System.EnterpriseServices
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.36373 built by: FX452RTMLDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.EnterpriseServices.dll
----------------------------------------
System.Windows.Forms.resources
    程序集版本:4.0.0.0
    Win32 版本:4.0.30319.34209 built by: FX452RTMGDR
    基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
----------------------------------------

**************
已加载的主次集 **************

 非常里着力的两段:

CYQ.Visualizer
    程序集版本:2.0.0.5
    Win32 版本:2.0.0.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Visualizer.dll
----------------------------------------
CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:5.7.5.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Data.DLL

CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:12.0.21005.1
    基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll

从位置的这一个错误音讯中,第一应声是要蒙B的,毕竟不认为奇啊~~~~

大致花了8分钟,终于反应过来了,经过周全的考虑,能够窥见:

1:CYQ.Data 被CYQ.Visualizer.dll加载是在同一目录下。

2:被Microsoft.VisualStudio.DebuggerVisualizers.dll加载却是在(上下文“LoadNeither”中,鬼知道这个LoadNeither是什么)。

于是,同一个dll被加载成三个不等渠道,导致上下文情状不均等,而不能够互转~~~~

怎么当先二分之一正规,小一些情状会这么管理啊,这两天不可能知道,微软也是爱造坑的~~~

2:Assembly.LoadFrom 的坑

此处再贴一段详细的不得了信息:

图片 5mscorlib
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD奥德赛

好呢,坑已经理解了,接下去怎么着埋才是至关重大:

主干代码:file:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/mscorlib.dll

Microsoft.VisualStudio.Platform.AppDomainManager 程序集版本:12.0.0.0
Win32 版本:12.0.21005.1
基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/Microsoft.VisualStudio.Platform.AppDomainManager/v4.0_12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.Platform.AppDomainManager.dll
—————————————- System 程序集版本:4.0.0.0 Win32
版本:4.0.30319.36373 built by: FX452RTMLD冠道基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System/v4.0_4.0.0.0__b77a5c561931e089/System.dll
—————————————- System.Xml 程序集版本:4.0.0.0
Win32 版本:4.0.30319.36373 built by: FX452RTMLD普拉多基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Xml/v4.0_4.0.0.0__b77a5c561935e089/System.Xml.dll
—————————————- System.Configuration
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD陆风X8基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Configuration/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Configuration.dll
—————————————- System.Windows.Forms
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD普拉多基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms/v4.0_4.0.0.0__b77a5c561933e089/System.Windows.Forms.dll
—————————————- System.Drawing
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLDXC60

1:埋坑思维一:测验下Assembly.Load、Assembly.LoadFile、Assembly.LoadFrom

写了几段测量试验代码:

 string filePath = AppDomain.CurrentDomain.BaseDirectory + "cyq\\CYQ.Data.dll";
            byte[] bytes = File.ReadAllBytes(filePath);
            Assembly ass = Assembly.Load(bytes);
            object o = ass.CreateInstance("CYQ.Data.Table.MDataTable");
 MDataTable dt = (MDataTable)o;

失败!

 string filePath = AppDomain.CurrentDomain.BaseDirectory + "cyq\\CYQ.Data.dll";
 Assembly ass = Assembly.LoadFrom(filePath);
 Assembly.LoadFile(filePath);
...省略...

都失败!!

基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Drawing/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Drawing.dll

Microsoft.VisualStudio.DebuggerVisualizers 程序集版本:12.0.0.0 Win32
版本:12.0.21005.1
基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
—————————————- CYQ.Visualizer
程序集版本:2.0.0.5 Win32 版本:2.0.0.5
基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%二〇一二.0/Common7/Packages/Debugger/Visualizers/CYQ.Visualizer.dll
—————————————- CYQ.Data 程序集版本:5.7.5.5
Win32 版本:5.7.5.5
基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%二零一二.0/Common7/Packages/Debugger/Visualizers/CYQ.Data.DLL
—————————————- System.Data 程序集版本:4.0.0.0
Win32 版本:4.0.30319.36373 built by: FX452RTMLDR基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Data/v4.0_4.0.0.0__b77a5c56一九三三e089/System.Data.dll
—————————————- System.Core 程序集版本:4.0.0.0
Win32 版本:4.0.30319.36373 built by: FX452RTMLDLX570基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Core/v4.0_4.0.0.0__b77a5c561933e089/System.Core.dll
—————————————- CYQ.Data 程序集版本:5.7.5.5
Win32 版本:12.0.21005.1
基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll
—————————————- System.Numerics
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD奇骏基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Numerics/v4.0_4.0.0.0__b77a5c561931e089/System.Numerics.dll
—————————————- System.Transactions
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD安德拉基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.Transactions/v4.0_4.0.0.0__b77a5c561935e089/System.Transactions.dll
—————————————- System.EnterpriseServices
程序集版本:4.0.0.0 Win32 版本:4.0.30319.36373 built by: FX452RTMLD冠道基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_32/System.EnterpriseServices/v4.0_4.0.0.0__b03f5f7f11d50a3a/System.Enterprise瑟维斯s.dll
—————————————- System.Windows.Forms.resources
程序集版本:4.0.0.0 Win32 版本:4.0.30319.34209 built by: FX452RTMGD奥迪Q7基本代码:file:///C:/Windows/Microsoft.Net/assembly/GAC_MSIL/System.Windows.Forms.resources/v4.0_4.0.0.0_zh-Hans_b77a5c561934e089/System.Windows.Forms.resources.dll
—————————————- **************
已加载的主次集 **************

 万分里着力的两段:

CYQ.Visualizer
    程序集版本:2.0.0.5
    Win32 版本:2.0.0.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Visualizer.dll
----------------------------------------
CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:5.7.5.5
    基本代码:file:///C:/Program%20Files%20(x86)/Microsoft%20Visual%20Studio%2012.0/Common7/Packages/Debugger/Visualizers/CYQ.Data.DLL

CYQ.Data
    程序集版本:5.7.5.5
    Win32 版本:12.0.21005.1
    基本代码:file:///C:/Windows/assembly/GAC_MSIL/Microsoft.VisualStudio.DebuggerVisualizers/12.0.0.0__b03f5f7f11d50a3a/Microsoft.VisualStudio.DebuggerVisualizers.dll

从上边的特别错误信息中,第一立马是要蒙B的,终究多如牛毛啊~~~~

大略花了8分钟,终于反应过来了,经过周详的思维,能够开采:

1:CYQ.Data 被CYQ.Visualizer.dll加载是在同一目录下。

2:被Microsoft.VisualStudio.DebuggerVisualizers.dll加载却是在(上下文“LoadNeither”中,鬼知道这个LoadNeither是什么)。

于是乎,同二个dll被加载成五个例外渠道,导致上下文蒙受不雷同,而无法互转~~~~

为啥大部分好端端,小片段境况会这么管理吧,前段时间不许知道,微软也是爱造坑的~~~

测量试验那四个办法,首若是想看看有未有何真相的区别,特别是和强签字合在一齐后~~~

把dll加个强签字试试~~~

图片 6

仍失败~~~~

总的看,作者想多了,分歧的dll路线加载的目的转变那条路是不通的了~~~~

可以吗,坑已经知晓了,接下去怎样埋才是至关重要:

2:埋坑思维二:强签字DLL,并登记到GAC中

力排众议上来讲:该形式百分百是一蹴而就的,必需路线的引用都以一样的。

措施也轻巧:通过代码加个注册的授命亦非哪些难事~~~~

依然思索有未有任何更简明的点子!

1:埋坑思维一:测量试验下Assembly.Load、Assembly.LoadFile、Assembly.LoadFrom

写了几段测量试验代码:

 string filePath = AppDomain.CurrentDomain.BaseDirectory + "cyq\\CYQ.Data.dll";
            byte[] bytes = File.ReadAllBytes(filePath);
            Assembly ass = Assembly.Load(bytes);
            object o = ass.CreateInstance("CYQ.Data.Table.MDataTable");
 MDataTable dt = (MDataTable)o;

失败!

 string filePath = AppDomain.CurrentDomain.BaseDirectory + "cyq\\CYQ.Data.dll";
 Assembly ass = Assembly.LoadFrom(filePath);
 Assembly.LoadFile(filePath);
...省略...

都失败!!

3:埋坑思维三:找个安静的中介

既然难题出现在种类化前的MDataTable和反体系化后的MDataTable在差异上下文的dll而造成的。

那就就找一种第三方中介了:MDataTable=>中介(连串化)=》中介(反系列化)=>MDataTable

不用动脑,就足以想到二种:json或 DataTable。

于是代码就动起来了:

系列化时,用DataTable

图片 7

反种类化时:

图片 8

打完收工,重新编绎,发给客商测量检验,符合规律通过~

测量检验那四个措施,主如果想看看有未有吗真相的分裂等,非常是和强签字合在协同后~~~

把dll加个强具名试试~~~

图片 9

仍失败~~~~

总的来讲,笔者想多了,差异的dll路线加载的靶子转变那条路是不通的了~~~~

工具下载地址:

http://www.cnblogs.com/cyq1162/p/6027051.html

2:埋坑思维二:强具名DLL,并注册到GAC中

力排众议上来讲:该方法百分之百是一蹴而就的,究竟路线的援引都以大同小异的。

方式也轻便:通过代码加个注册的授命亦不是怎么难点~~~~

要么思虑有没有任何更轻易的法门!

总结:

1:这么经过了相当的短的时间,第一回栽坑在as转换上,可能是没悟出,大概是相对想不到。

2:分歧的门道加载的同样的dll类型不能互转,这么经过了非常短的时间到底遇上了,表达上的山多照旧拜望鬼的。

可既然版本号和签字都完全一样,又认为签字不可能伪造,那为啥不呢?

 

3:埋坑思维三:找个安静的中介

既然难点出未来系列化前的MDataTable和反类别化后的MDataTable在分化上下文的dll而致使的。

那就就找一种第三方中介了:MDataTable=>中介(体系化)=》中介(反系列化)=>MDataTable

不用动脑,就足以想到二种:json或 DataTable。

于是代码就动起来了:

体系化时,用DataTable

图片 10

反体系化时:

图片 11

打完收工,重新编绎,发给顾客测验,符合规律通过~

工具下载地址:

http://www.cnblogs.com/cyq1162/p/6027051.html

总结:

1:这么长此以往,第三回栽坑在as调换上,只怕是没悟出,可能是相对想不到。

2:分歧的门道加载的一律的dll类型不能够互转,这么经过了不短的时间好不轻松遇上了,表明上的山多如故拜候鬼的。

可既然版本号和签字都一模二样,又认为签字不能伪造,那怎么不呢?

 

http://www.bkjia.com/C\_jc/1181940.htmlwww.bkjia.comtruehttp://www.bkjia.com/C\_jc/1181940.htmlTechArticle为C\# as 类型调换及Assembly.LoadFrom埋坑!,
背景:
不久前,作者宣布了多少个调治将养工具:发表:.NET开拓人士必备的可视化调节和测验工具(你值的富有…

相关文章

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图