他のプロジェクト (ProjOld) にあるいくつかのクラスを配置したい新しいプロジェクト (ProjNew) がある場合。
問題は、Obsolete のマークが付いた古いクラスを維持して、すべてのプロジェクトを実行しないようにし、それを使用しているかどうかを確認することです。
ただし、名前空間で明示的に呼び出していないため、あいまいなクラス名エラーが発生する可能性があります。
あいまいな場合に使用するアセンブリを時代遅れに言う方法はありますか?
何を求めているのか完全に明確ではありませんが、とにかく試してみます。
old.dll と new.dll という 2 つの DLL があり、どちらもタイプ C の名前空間 N を持っているとします。これを行うことができます。
csc /r:NEW=new.dll /r:OLD=old.dll foo.cs
そして、foo.csで次のように言うことができます
extern alias NEW;
extern alias OLD;
class D : NEW::N.C { }
class E : OLD::N.C { }
D は new.dll の NC を継承し、E は old.dll の NC を継承します。
それはあなたの問題を解決しますか?
あなたの質問を完全に理解しているかどうかはわかりませんが、これは役立つかもしれません。Using ディレクティブを使用して、使用するクラスを明確にすることができます。例: ClassA = OldAssembly.ClassA; の使用。
ClassA へのすべての参照は、OldAssembly を参照します。
クラスを部分クラスとして作成し、廃止する必要があるメソッドをマークすることができます。
これにより、クラスを複数のファイルに分割しても、同じクラス名を使用できます。
クラスをSystem.ObsoleteAttributeでマークします
http://msdn.microsoft.com/en-us/library/system.obsoleteattribute.aspx
using System;
class Program
{
static void Main()
{
MethodA();
}
[Obsolete("Use MethodB instead")]
static void MethodA()
{
}
static void MethodB()
{
}
}
わかった。同じクラスを別の名前空間に追加すると、あいまいなエラーがコンパイル時に発生するだけのようです。実行時に発生するのではないかと心配していましたが、テストしたところ問題はありませんでした。
ありがとう