ドットネットフレームワーク3.5上に構築されたクラスライブラリプロジェクトが1つあります。私は最初のプロジェクトで作成されたDLLを新しいドットネットコアアプリケーションで参照し、そのライブラリからクラスを拡張したいと考えています。C#ドットネットコア拡張クラスネットフレームワークDLL
Microsoft.NETCore.Portable.Compatibilityへのナゲットリファレンスを追加して、いくつかの基本的な問題を修正する必要がありましたが、今では抽象メソッドでクラスを拡張するとメソッドをオーバーライドできません。クラスがメソッドを実装していないというエラーが発生し、オーバーライドするものがないというエラーが発生する逆説的な状況が発生します。
これを回避する方法はありますか、ドットネットコアではまったくサポートされていませんか?
基底クラス(ドットネットフレームワーク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クラスを解決するためです。 Compatibilityパッケージがこれに対する解決策を見つけ出すためにどのように機能するかについて私は十分に分かりません。
ここには、同じエラーが発生するようにすべてのプロジェクトを設定した完全なリポジトリがあります。 VSは、バイナリの古いバージョンを使用しているときだけで2017 https://github.com/strigonLeader/dotnetcoreexample
間違いなく公的な方法ですか?問題を示す最小限の例を投稿できますか? –
保護されたレベルのアクセスでクラスを拡張することができる別の.net 3.5プロジェクトがあります – HonestHeuristic
画像の代わりにコードのテキストを投稿します –