From 3a7cfaf17bf686515a6b2cc8be5731ca9e761a03 Mon Sep 17 00:00:00 2001 From: parallelbgls Date: Tue, 2 May 2017 09:35:57 +0800 Subject: [PATCH] Emergency Fix: Support .NET Core --- Modbus.Net/src/Base.Common/BaseConnector.cs | 18 +++++++++++++----- Modbus.Net/src/Base.Common/BaseMachine.cs | 6 ++---- Tests/Modbus.Net.Tests/MachineMethodTest.cs | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/Modbus.Net/src/Base.Common/BaseConnector.cs b/Modbus.Net/src/Base.Common/BaseConnector.cs index a237210..0d32421 100644 --- a/Modbus.Net/src/Base.Common/BaseConnector.cs +++ b/Modbus.Net/src/Base.Common/BaseConnector.cs @@ -5,7 +5,15 @@ namespace Modbus.Net /// /// 基础的协议连接类 /// - public abstract class BaseConnector + public abstract class BaseConnector : BaseConnector + { + + } + + /// + /// 基础的协议连接类 + /// + public abstract class BaseConnector { /// /// 标识Connector的连接关键字 @@ -40,27 +48,27 @@ namespace Modbus.Net /// /// 需要发送的数据 /// 是否发送成功 - public abstract bool SendMsgWithoutReturn(byte[] message); + public abstract bool SendMsgWithoutReturn(TParamIn message); /// /// 无返回发送数据 /// /// 需要发送的数据 /// 是否发送成功 - public abstract Task SendMsgWithoutReturnAsync(byte[] message); + public abstract Task SendMsgWithoutReturnAsync(TParamIn message); /// /// 带返回发送数据 /// /// 需要发送的数据 /// 是否发送成功 - public abstract byte[] SendMsg(byte[] message); + public abstract TParamOut SendMsg(TParamIn message); /// /// 带返回发送数据 /// /// 需要发送的数据 /// 是否发送成功 - public abstract Task SendMsgAsync(byte[] message); + public abstract Task SendMsgAsync(TParamIn message); } } \ No newline at end of file diff --git a/Modbus.Net/src/Base.Common/BaseMachine.cs b/Modbus.Net/src/Base.Common/BaseMachine.cs index 2a3a208..b367f3a 100644 --- a/Modbus.Net/src/Base.Common/BaseMachine.cs +++ b/Modbus.Net/src/Base.Common/BaseMachine.cs @@ -594,8 +594,7 @@ namespace Modbus.Net if (BaseUtility is TUtilityMethod) { Type t = typeof(TUtilityMethod); - object returnValue = t.GetMethod(methodName, - BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public) + object returnValue = t.GetRuntimeMethod(methodName, parameters.Select(p => p.GetType()).ToArray()) .Invoke(BaseUtility, parameters); return (TReturnType) returnValue; } @@ -616,8 +615,7 @@ namespace Modbus.Net if (this is TMachineMethod) { Type t = typeof(TMachineMethod); - object returnValue = t.GetMethod(methodName, - BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.Public) + object returnValue = t.GetRuntimeMethod(methodName, parameters.Select(p => p.GetType()).ToArray()) .Invoke(this, parameters); return (TReturnType) returnValue; } diff --git a/Tests/Modbus.Net.Tests/MachineMethodTest.cs b/Tests/Modbus.Net.Tests/MachineMethodTest.cs index 0434c43..be08009 100644 --- a/Tests/Modbus.Net.Tests/MachineMethodTest.cs +++ b/Tests/Modbus.Net.Tests/MachineMethodTest.cs @@ -16,7 +16,7 @@ namespace Modbus.Net.Tests { BaseMachine baseMachine = new ModbusMachine(ModbusType.Tcp, "192.168.3.12", null, true, 2, 0); var utility = baseMachine.GetUtility(); - var methods = utility.GetType().GetMethods(BindingFlags.Public | BindingFlags.Instance | BindingFlags.DeclaredOnly); + var methods = utility.GetType().GetRuntimeMethods(); Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "GetTimeAsync") != null, true); Assert.AreEqual(methods.FirstOrDefault(method => method.Name == "SetTimeAsync") != null, true); }