我有一个建立在网络框架3.5的类库项目。我想要一个新的dot net核心应用程序引用第一个项目生成的dll并从该库中扩展类。从网络框架DLL的C#点网络核心扩展类
我不得不添加一个nuget引用到Microsoft.NETCore.Portable.Compatibility来解决这样做的一些基本问题,但现在当我用抽象方法扩展一个类时,我无法重写该方法。我得到了一个自相矛盾的情况,那就是类引发了一个错误,那就是该方法没有被实现,并且该方法引发了一个错误,那就是没有什么可以重写。
有没有办法解决这个问题,或者根本不支持dot net core?
基类(点净框架3.5类库):
public abstract class Server {
public event Action<Connection> ConnectionEstablished;
private TcpListener m_listenSocket;
private Task m_awaitConnectionTask;
readonly private List<Action> m_serverStoppedCallbacks = new List<Action>();
protected Server(int port) {
m_listenSocket = new TcpListener(IPAddress.Parse("localhost"), port);
}
public void Listen() {
m_listenSocket.Start();
m_awaitConnectionTask = new Task(AwaitConnection);
}
public void WhenStopped(Action callback) {
lock(m_serverStoppedCallbacks)
m_serverStoppedCallbacks.Add(callback);
}
protected abstract Connection CreateConnection(TcpClient tcpClient);
private void AwaitConnection() {
try {
while (true)
ConnectionEstablished?.Invoke(CreateConnection(m_listenSocket.AcceptTcpClient()));
} catch (SocketException e) {
} finally {
m_listenSocket.Stop();
List<Action> callbacks;
lock (m_serverStoppedCallbacks) {
callbacks = m_serverStoppedCallbacks.ToList();
m_serverStoppedCallbacks.Clear();
}
foreach (var callback in callbacks)
callback();
}
}
}
继承类(点网核心命令行程序):
public class Server : Communism.Network.Server {
public Server(int port) : base(port) {
}
public static void Main() {
}
protected override Connection CreateConnection(TcpClient tcpClient) {
return null;
}
}
经过调查的问题正在被引起TcpClient类型。如果我使CreateConnection的签名不带参数或构建类型,我可以很好地扩展。这可能是因为Compatibility包将TcpClient类解析为与针对该库编译的TcpClient类不同。我对兼容性包的工作方式不太了解,无法找出解决方案。
下面是一个完整的存储库,其中包含所有项目,以便获得相同的错误。只需在visual studio 2017中打开解决方案。 https://github.com/strigonLeader/dotnetcoreexample
这绝对是一种公开的方法吗?你能发表一个证明问题的简单例子吗? –
它的保护,我有另一个.net 3.5项目,我可以延长保护级别访问类罚款 – HonestHeuristic
代码的文本代替图像 –