c# - ¿Es posible marcar un ensamblaje como obsoleto?
.net (3)
Me gustaría mostrar un mensaje de advertencia cuando los usuarios compilan código que hace referencia a un ensamblaje que estamos planeando eliminar. El contenido de este ensamblaje se ha fusionado con otro, y me gustaría animar a los usuarios a que dejen de hacer referencia al ensamblaje anterior.
Desafortunadamente, parece que ObsoleteAttribute no es válido para ensamblajes. ¿Hay alguna otra manera de provocar una advertencia del compilador cuando se construye un proyecto que hace referencia a un conjunto?
Gracias.
EDITAR: Para aclarar, esto es lo que parecen los ensamblajes antes y después de la fusión
Antes de la fusión:
Assembly1:
namespace A.B.C {
class C1
...
}
Assembly2:
namespace A.B.D {
class D1
...
}
Después de la fusión:
Assembly1:
(empty)
Assembly2:
namespace A.B.C {
class C1
...
}
namespace A.B.D {
class D1
...
}
Antes de la fusión, los usuarios hicieron referencia tanto a Assembly1 como a Assembly2. Después de la fusión, solo necesitan hacer referencia a Assembly2, pero prefiero generar una advertencia de que Assembly1 ya no es necesario para romper sus compilaciones al eliminar Assembly1 de inmediato.
Parece que debería usar reenviadores de tipo para asegurarme de que los programas que ya se han creado contra estos ensamblados continúen funcionando sin necesidad de volver a compilarlos, pero no quiero dejar las clases de stub en Assembly1 solo para marcar el ensamblado como obsoleto.
Al mover tipos de un ensamblaje a otro, lo correcto es usar un reenviador de tipo , no marcar las clases de ensamblaje antiguas como obsoletas.
Marque cada una de las clases en el ensamblaje antiguo como inutilizable.
Esto funcionó para mí:
[Obsolete("Deprecated. Use ''Substitute'' class in ''NewAssembly'' instead.")]
public class OutdatedClass : IDisposable, IXmlSerializable
{
//code...
}
Al intentar compilar, recibí toneladas de advertencias sobre el uso de esa clase.
Puede hacer que sea un error de compilación para hacer referencia al ensamblaje al pasar True como el segundo parámetro al atributo.
[Obsolete("Deprecated. Use ''Substitute'' class in ''NewAssembly'' instead.", true)]
public class OutdatedClass : IDisposable, IXmlSerializable
{
//code...
}
Acabo de probar eso, y también funcionó (es decir, compilación fallida)
No veo nada específico en MSDN. Sin embargo, podría crear su propio atributo de ensamblaje, pero solo si cree que es tan importante. Por otra parte, hacerlo no impide que alguien lo use y no estoy seguro de cómo podría incluso hacerle saber a alguien que se ha desaprobado.
Honestamente, creo que colocaría [Obsolete]
en las clases de acceso público.
De acuerdo con lo que leí en la publicación de @ Eric y el enlace que proporcionó junto con el comentario de WS, use [TypeForwardedTo]
.