Подтвердить что ты не робот

Можно ли отметить сборку как устаревшую?

Я хочу создать предупреждающее сообщение, когда пользователи компилируют код, который ссылается на сборку, которую мы планируем удалить. Содержимое этой сборки было объединено с другим, и я бы хотел, чтобы пользователи перестали ссылаться на старую сборку.

К сожалению, похоже, что ObsoleteAttribute недействителен для сборок. Есть ли другой способ вызвать предупреждение компилятора при построении проекта, ссылающегося на сборку?

Спасибо.

РЕДАКТИРОВАТЬ: для пояснения, как выглядит сборка до и после слияния

Перед слиянием:

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

Assembly2:
namespace A.B.D {
    class D1
    ...
}

После слияния:

Assembly1:
(empty)

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

namespace A.B.D {
    class D1
    ...
}

До слияния пользователи ссылаются как на Assembly1, так и на Assembly2. После слияния им нужно всего лишь ссылаться на Assembly2, но я предпочел бы предупредить, что Assembly1 больше не нужен, чем разбить их сборки, сразу удалив Assembly1.

Похоже, я должен использовать форвардеры типов, чтобы убедиться, что программы, которые уже были созданы против этих сборок, продолжают работать без необходимости перекомпиляции, но я не хочу оставлять классы-заглушки в Assembly1 только для того, чтобы отметить сборку как устаревшую.

4b9b3361

Ответ 2

Я не вижу ничего конкретного в MSDN. Однако вы можете создать свой собственный атрибут сборки, но только если вы считаете, что это важно. Опять же, это не мешает кому-либо использовать его, и я не уверен, как вы могли бы даже сообщить кому-то, что он устарел.

Честно говоря, я думаю, что я бы разместил [Obsolete] в общедоступных классах.

На основании того, что я прочитал в сообщении @Eric и ссылки, которую он предоставил вместе с комментарием WS, используйте [TypeForwardedTo].

Ответ 3

Отметьте каждый из классов старой сборки как непригодный.

Это сработало для меня:

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

При попытке скомпилировать, я получил множество предупреждений об использовании этого класса.

Вы можете сделать ошибку компиляции ссылкой на сборку, передав в качестве второго параметра атрибут True.

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

public class OutdatedClass : IDisposable, IXmlSerializable
{ 
    //code...
}

Я только что протестировал это, и он также работал (т.е. скомпилирование не удалось)