C#dot net core扩展类来自net framework dll

时间:2017-05-06 08:52:24

标签: c# .net .net-core

我有一个基于dot net framework 3.5构建的类库项目。我希望有一个新的dot net core应用程序引用第一个项目生成的dll并从该库扩展类。

我必须添加一个nuget引用到Microsoft.NETCore.Portable.Compatibility来修复一些基本问题,但现在当我用抽象方法扩展一个类时,我无法覆盖该方法。我遇到一个矛盾的情况,即类引发了一个错误,该方法没有实现,并且该方法引发的错误是没有任何内容可以覆盖。

有没有办法解决这个问题,或者根本不支持dot net core?

基类(dot net framework 3.5 class library):

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

继承类(dot 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的签名没有参数或构建类型我可以延长。这可能是因为Compatibility包将TcpClient类解析为与编译库的TcpClient类不同。我不太了解兼容性软件包如何为此找到解决方案。

这是一个包含所有项目的完整存储库,以便您获得相同的错误。只需在Visual Studio 2017中打开解决方案。 https://github.com/strigonLeader/dotnetcoreexample

1 个答案:

答案 0 :(得分:0)

我唯一一次看到类似的事情发生在VS使用旧版本的二进制文件时。我以前被它烧过,因为我忘了清理解决方案,或者当VS有某种问题找到引用并自动解析为它在地狱的第九层找到的副本。如果两个类位于不同的项目中,您可能还想查看是否针对相同的框架。