Я нашел бесчисленное количество раз, реорганизовывая наше решение (72 + проекты), в усилиях по сокращению кода. Много раз это связано с вытаскиванием общих типов/библиотек и их перемещением.
Он всегда включает ошибку репликации компилятора, поэтому мне приходится исправлять ту же ошибку компилятора во многих разных местах. Я ищу руководство для VS api, поэтому я могу сделать некоторые генерации кода/автоматическую фиксацию.
Даже если у вас нет точного решения, можете ли вы указать мне, где я должен выглядеть? Есть ли компилятор api? рефактор api? Любые предложения о том, как я могу сделать это?
Случаи использования:
Итак, первый вопрос (самый простой из двух):
Автоматическая фиксация при перемещении файла из одного проекта в другой. Этот процесс должен был бы найти ошибку
"Не удалось найти имя типа или пространства имен MovedClass.
Затем удалите старое пространство имен, добавьте новое и добавьте ссылку на проект.
Случай 2... рефакторинг с шаблоном.
Пример:
Оригинальный базовый класс VO:
public class BaseVO{
public AuditInfo { get;set;}
}
public class BaseKey{
}
Все наши бизнес-объекты (каждый в отдельном классе).
public class ExampleBusinessVO : BaseVO{
public AuditInfo { get;set;}
public ExampleBusinessKey BusinessKey { get;set;}
}
public class ExampleBusinessKey{
}
Теперь предположим, что мы хотим добавить явную связь между BaseVO и базовым ключом и заставить всех реализовать Equals/HashCode
Новый базовый класс VO:
public abstract class BaseVO<TKey>{
TKey BusinessKey{get;set;}
public abstract override bool Equals(object obj);
public abstract override int GetHashCode();
}
public class BaseKey{
}
Затем я должен каскадировать эти изменения ко всем VO. (ouch)
//Add generic
public class ExampleBusinessVO : BaseVO<ExampleBusinessKey>{
//Remove old business key
//Implement methods
public override bool Equals(object obj){
}
}
public class ExampleBusinessKey: BaseKey{
}
Теперь я узнаю, что не могу исправить все ошибки, но было бы неплохо написать что-то, чтобы проверить класс на ошибки компиляции. Тогда я мог бы разработать прагматическое решение:
Для каждого из VO, если ошибка: "Использование универсального типа... требует 1 аргумент типа", затем прочитайте файл класса и найдите класс, реализующий BaseKey, а затем добавьте его в метод шаблона.
Обратите внимание, что я ищу автоматическое решение, а не инструмент рефакторинга
Лично я бы рекомендовал ReSharper, поскольку он предоставляет функции для большинства рефакторинговых работ, которые могут вам понадобиться.
Перемещение типов (даже между проектами), типы переименования, методы извлечения, подписи порядка переупорядочения и т.д.
Это платное решение, но оно стоит ваших денег (или вашего работодателя). Вы можете скачать бесплатную пробную версию с сайта, который полностью функциональен, чтобы почувствовать его.
EDIT:
Хорошо, поэтому я только что проверил это, и ReSharper позаботится обо всех работах, необходимых для перемещения одного типа в другой проект, но он автоматически не добавит вам ссылки. Тем не менее, это дает вам справедливое предупреждение о необходимости использования новых ссылок, и добавление этих ссылок довольно просто, используя ReSharper: