Как вы увидите ниже, я вызываю метод, который возвращает 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
Мобильная версия