Итак, я просто столкнулся с следующей проблемой, которая подняла бровь.Assembly.GetCallingAssembly() и статические конструкторы?
По различным причинам у меня есть тестовая установка, где классы тестирования в TestingAssembly.dll зависят от класса TestingBase в BaseTestingAssembly.dll. Одна из вещей TestBase делает в то же время, это посмотреть на определенный внедренный ресурс в своем собственном и вызывающей сборке
Так что мой BaseTestingAssembly содержал следующие строки ...
public class TestBase {
private static Assembly _assembly;
private static Assembly _calling_assembly;
static TestBase() {
_assembly = Assembly.GetExecutingAssembly();
_calling_assembly = Assembly.GetCallingAssembly();
}
}
Static, так как я понял , эти сборки будут одинаковыми в течение срока действия приложения, поэтому зачем беспокоиться о пересчете их на каждом отдельном тесте.
При выполнении этого, однако, я заметил, что как _assembly, так и _calling_assembly устанавливаются в BaseTestingAssembly, а не BaseTestingAssembly и TestingAssembly соответственно.
Установка переменных в нестатические и их инициализация в регулярном конструкторе исправила это, но я смущен, почему это произошло, чтобы начать это. Я думал, что статические конструкторы запускаются в первый раз, когда статический член получает ссылку. Это может быть только из моей TestingAssembly, которая должна была быть вызывающей. Кто-нибудь знает, что могло бы произойти?
так почему же вызывающая сборка не равна нулю? –
Это было бы более полезно? :) –
Нет, похоже, что это имело бы смысл, хотя –