我有一個建立在網絡框架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
代碼的文本代替圖像 –