C#DOT NET CORE从Net Framework DLL扩展了类



我有一个基于DOT Net Framework 3.5的类库项目。我想拥有一个新的DOT Net Core应用程序参考第一个项目生产的DLL并从该库中扩展类。

我不得不将nuget引用添加到microsoft.netcore.portable.com.portable.com上,以使解决此操作的一些基本问题,但是现在,当我使用抽象方法扩展一类时,我无法覆盖该方法。我得到了一个矛盾的情况,该课程正在引起该方法未实现的错误,该方法正在引起错误,没有什么可以覆盖的。

是否有某种方法可以解决此问题,或者根本不支持DOT Net Core?

基类(DOT Net Framework 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();
        }
    }
}

继承类(点Net Core命令行应用程序(:

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的签名无需参数或构建类型,则可以很好地扩展。可能是因为兼容性软件包将TCPCLIENT类解析为与库相反的TCPCLIENT类不同。我对兼容软件包的工作方式不太了解。

这是一个完整的存储库,其中所有设置的项目都可以遇到相同的错误。只需在Visual Studio 2017中打开解决方案即可。https://github.com/strigonleader/dotnetcoreexample

我唯一看到这样的事情是在VS使用旧版本的二进制版本时。我以前被它烧死了,因为我忘了清洁解决方案,或者当VS有某种问题时找到参考并自动解决在地狱第九层中发现的副本。如果两个类在不同的项目中,则可能还想查看是否针对同一框架。

最新更新