Я прошу прощения, если об этом уже спрашивали или теперь он отвечает.
Я работаю с большой базой кода (большая часть написана другим инженером-программистом до того, как я начал над ней работать, стандартнодело).Я добавил довольно много кода в этот проект, большая часть которого заключалась в том, чтобы обернуть существующие методы в объекты / библиотеки для простоты повторного использования.Под оболочкой я подразумеваю, что я скопировал их в новый объект / библиотеку, отредактировал их, чтобы они работали как отдельные объекты или библиотеки (где это применимо), и вызвал / создал их в соответствующих случаях в исходной кодовой базе.
Например, вместо массивного метода (foo), который предоставляет какую-то одноразовую функцию, включаемую в один из файлов .cs для основного exe, я обернул его в его собственный класс и разделил так, чтобы онможет (теоретически) использоваться в других проектах или других частях решения.
IE, переходящий от этого:
/* somewhere in Main */
void Main ()
{
...
foo (arg1, arg2, arg3)
...
}
foo (arg1, arg2, arg3)
{
//some massive functionality
}
к этому:
/* somewhere in Main or any other part of the code base */
Foo myFoo = new Foo (arg1, arg2, arg3);
myFoo.DoSomething();
сегодня,Я начал просматривать кодовую базу и комментировать все старые методы (те, которые я обернул в объекты / библиотеки), чтобы выяснить, какой из них я могу удалить из исходной кодовой базы.Я использую программное обеспечение для контроля версий, и я делаю их по несколько раз, затем перекомпилирую и выполняю некоторое тестирование, чтобы убедиться, что я ничего не сломал.
Мой вопрос таков: когдаЯ компилирую, достаточно ли умен компилятор C # (использующий версию 3.5), чтобы он не включал методы / функции / объекты / библиотеки, которые никогда не вызывались, не создавались и не использовались?из устаревших методов / функций, но мне просто интересно, может ли компилятор выводить выходные данные, которые не содержат эти методы / функции.
TL; DR : если у меня естьследующий Main.cs
/*using statements here*/
public void Main ()
{
foo();
}
foo ()
{
/*Some commands*/
}
bar()
{
/*Never called*/
}
Содержит ли мой скомпилированный вывод какие-либо ссылки на bar?