Простой блок if не введен в опубликованное консольное приложение – ошибка компилятора?C#

Место общения программистов C#
Ответить
Anonymous
 Простой блок if не введен в опубликованное консольное приложение – ошибка компилятора?

Сообщение Anonymous »

Во время отладки приложения я столкнулся с поведением, которое нарушает фундаментальные принципы выполнения программы. Я никогда не видел ничего подобного за более чем 5 лет разработки на C#.
Как вы увидите ниже, я вызываю метод, который возвращает true, если пользователь вводит y.
Если это так, я присваиваю другой переменной значение true. Просто, правда?
Если я запускаю программу в своей IDE, все работает нормально. Если я опубликую программу в локальной папке, поведение изменится. Несмотря на то, что метод возвращает true, блок if не вводится.
Проблема возникает только в том случае, если я публикую как один файл, зависящий от платформы.
Я упростил проблему в простое консольное приложение. Вот Program.cs:

Код: Выделить всё

bool returnedTrue = false;
bool confirmation = GetConfirmation("Should this method return true?");

// this doesn't work
if (confirmation)
{
returnedTrue = true;
}

// this works:
// returnedTrue = confirmation;

Console.WriteLine("Method returned: " + returnedTrue);
Console.ReadKey();

bool GetConfirmation(string s)
{
Console.WriteLine(s);
var timer = 20;

while (timer != 0)
{
var keyAvailable = Console.KeyAvailable;
if (keyAvailable)
{
var keyChar = Console.ReadKey().KeyChar;
Console.WriteLine();
Console.WriteLine("Key pressed: " + keyChar + " -> returning " + (keyChar is 'y' or 'Y'));
return keyChar is 'y' or 'Y';
}

Thread.Sleep(250);
timer--;
}

Console.Write(" -> No input: Defaulting to no \n");
return false;
}
Я публикую с помощью:

Код: Выделить всё

dotnet publish -c Release -r win-x64 --self-contained true -o ./bin/Release/net8.0/win-x64/publish -p:PublishSingleFile=true -p:PublishTrimmed=true
И вот результат:

Код: Выделить всё

Should this method return true?
y
Key pressed: y -> returning True
Method returned: False
Как это возможно? У меня нет этому объяснения — попробуйте сами.

Подробнее здесь: https://stackoverflow.com/questions/784 ... mpiler-bug
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»