如果有一个新项目(ProjNew),我想在其他项目(ProjOld)上放置几个类。
问题是我想维护标有Obsolete的旧类,以避免运行我的所有项目并检查它们是否使用它。
但是这样可能会产生一个模糊的类名错误,因为我没有显式调用命名空间。
有没有办法在过时的模糊情况下使用哪个程序集?
答案 0 :(得分:4)
你所要求的并不完全清楚,但无论如何我都会试一试。
假设您有两个DLL,old.dll和new.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中的N.C继承,E将从old.dll中的N.C继承。
这能解决您的问题吗?
答案 1 :(得分:2)
我不确定我是否完全理解你的问题,但这可能有所帮助。您可以使用Using指令来阐明要使用的类。一个例子: 使用ClassA = OldAssembly.ClassA;
然后,对ClassA的任何引用都将引用OldAssembly。
答案 2 :(得分:1)
您可以将类创建为partial classes并标记您需要过时的方法。
这样您就可以将类划分为多个文件,并且仍然使用相同的类名。
答案 3 :(得分:0)
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()
{
}
}
答案 4 :(得分:0)
行。似乎如果我将同一个类添加到另一个命名空间,那么ambiguos错误就是我在编译时发生的。 我担心它会在运行时发生,但我测试它并没有问题。
由于