[英]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.