Конструктор атрибута, украшающий основной метод, не вызывается в сборках релиза. - PullRequest
3 голосов
/ 22 ноября 2010

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

Любое понимание этого вопроса будет очень цениться.

1 Ответ

2 голосов
/ 22 ноября 2010

Я могу воспроизвести это (как в режиме отладки, так и в выпуске), при выполнении через IDE с включенной опцией «Debug» => «Включить процесс размещения Visual Studio», с помощью приведенного ниже.В командной строке он выведет «привет», а через IDE - «мир».Похоже, что IDE по-разному отражает атрибуты.

Это не ожидаемое поведение, и вы не должны полагаться на это поведение.Если вы хотите, чтобы какой-то конкретный код выполнялся: вызывайте нужный код явно.Чтобы получить предсказуемое поведение, отключите параметр «Отладка» => «Включить процесс размещения Visual Studio».

using System;
public class MyTestAttribute : Attribute {
    public MyTestAttribute() {
        Program.text = "world";
    }
}
class Program {
    public static string text = "hello";
    [MyTest]
    static void Main() {
        Console.WriteLine(text);
        Console.ReadKey();
    }
}
...