是否可以将程序集标记为已弃用?

Gre*_*reg 30 .net c#

当用户编译引用我们计划删除的程序集的代码时,我想生成一条警告消息.这个程序集的内容已经与另一个合并了,我想鼓励用户停止引用旧程序集.

不幸的是,看起来ObsoleteAttribute对程序集无效.在构建引用程序集的项目时,有没有其他方法可以导致编译器警告?

谢谢.

编辑:为了澄清,这是在合并之前和之后组件的样子

合并前:

Assembly1:
namespace A.B.C {
    class C1
    ...
}

Assembly2:
namespace A.B.D {
    class D1
    ...
}
Run Code Online (Sandbox Code Playgroud)

合并后:

Assembly1:
(empty)

Assembly2:
namespace A.B.C {
    class C1
    ...
}

namespace A.B.D {
    class D1
    ...
}
Run Code Online (Sandbox Code Playgroud)

在合并之前,用户引用了Assembly1和Assembly2.在合并之后,他们只需要引用Assembly2,但我宁愿产生一个警告,即Assembly1不再需要通过立即删除Assembly1来破坏它们的构建.

听起来我应该使用类型转发器来确保已经针对这些程序集构建的程序继续工作而不需要重新编译,但我不想在Assembly1中留下存根类只是为了将程序集标记为过时.

Eri*_*ert 32

将类型从一个程序集移动到另一个程序集时,正确的做法是使用类型转发器,而不是将旧的程序集类标记为过时.

请参阅:"CLR Hoser - Whidbey Factoring功能的奇迹 - 第一部分:类型转发器"作者:Richard Lander(2005)

  • 如果有人想知道:该属性是`TypeForwardedTo`(http://msdn.microsoft.com/en-us/library/system.runtime.compilerservices.typeforwardedtoattribute.aspx) (10认同)
  • 类型转发...每天学习新东西. (4认同)

Fli*_*ter 5

将旧程序集中的每个类标记为不可用.

这对我有用:

[Obsolete("Deprecated.  Use 'Substitute' class in 'NewAssembly' instead.")]
public class OutdatedClass : IDisposable, IXmlSerializable
{ 
    //code...
}
Run Code Online (Sandbox Code Playgroud)

在尝试编译时,我收到了关于使用该类的大量警告.

通过将True作为第二个参数传递给属性,可以使编译错误引用程序集.

[Obsolete("Deprecated.  Use 'Substitute' class in 'NewAssembly' instead.", true)]

public class OutdatedClass : IDisposable, IXmlSerializable
{ 
    //code...
}
Run Code Online (Sandbox Code Playgroud)

我只测试了它,它也有效(即 - 编译失败)