簡體   English   中英

C#點網絡核心從網絡框架dll擴展類

[英]C# dot net core extend class from net framework dll

我有一個基於點網框架3.5構建的類庫項目。 我想要一個新的點網核心應用程序引用第一個項目生成的dll,並從該庫擴展類。

我不得不添加對Microsoft.NETCore.Portable.Compatibility的nuget引用,以解決此問題的一些基本問題,但是現在當我使用抽象方法擴展類時,無法覆蓋該方法。 我遇到了一個自相矛盾的情況,該類正在引發一個錯誤,指出該方法未實現,而該方法引發的錯誤是沒有要覆蓋的內容。

有什么方法可以解決此問題,或者點網核心根本不支持它?

基類(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();
        }
    }
}

繼承類(點網核心命令行應用程序):

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在找到引用時遇到某種問題,並自動解析為地獄第9層中找到的副本時。 如果兩個類位於不同的項目中,則您可能還想查看是否針對同一框架。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM