Маленькая победа над отступами в IDE Visual Studio
Рабочая IDE Visual Studio 2022, на Windows
Недавно дали проект, в котором почему‑то все отступы через tab‑ы. Я привык к «точкам»(spaces). Мне хотелось как‑то быстро конвертнуть проект из табов — в «точки».
Быстрое гугление дало, что нужно просто поправить в TextEditor настройку с отступами. Далее, еще советовали Adaptive Formatting.
Все советы не помогли, кроме одного, чтобы конвертнуть — нужно сделать вручную замену везде с табов на точки. Я так и сделал.
Далее, я попробовал нарушить отступ в одном файле и сделать формат этого файла. И в нем форматирование вернулось — как и было ранее — с табами.
Что же не так?
Еще немного гугления натолкнуло на мысль, что у меня в проекте есть .editorconfig
И вот только там я обнаружил причину моих «страданий»
Я поменял в этом конфиге с indent_style = tab на indent_style = space
И все заработало как и ожидалось!

.NET *
Хаб со знаниями про .NET
А все уже переводят свои классы в силед ради производительности?
Все ссылки говорят, что рили крута фича...
https://devblogs.microsoft.com/dotnet/performance-improvements-in-net-6/#peanut-butter
https://www.youtube.com/watch?v=d76WWAD99Yo
https://stackoverflow.com/questions/2134/do-sealed-classes-really-offer-performance-benefits
https://www.meziantou.net/performance-benefits-of-sealed-class.htm
Я один не знал этого?!!
Кстати, наткнулся на эту тему в ответе на ревью-замечание в мердж-реквесте.
Интересный вопрос. Что выведет данная программа? А скомпилируется ли она вообще?
var str = new TheBestStructEver(5);
Console.WriteLine(str.A);
public struct TheBestStructEver
{
public int A;
public TheBestStructEver(int a)
{
A = a;
this = new TheBestStructEver();
}
}
Ответ: Да, скомпилируется, причем без всяких предупреждений, и выведет 0.
Давайте разберем почему это так. Обратимся к IL-коду нашей структуры, а конкретнее к 12-ой строчке. Вот как она выглядит в IL-коде:
IL_0013: ldarg.0
IL_0014: initobj TheBestStructEver
Итак, первая строчка загружает в стек нулевой аргумент, переданный в метод (конструктор - тоже метод). Аргумент под нулевым индексом - это указатель на объект, в котором мы работаем, то есть this
. initobj
инициализирует каждое поле структуры нулями или null по адресу, которое лежит у нас первым в стеке (а у нас там лежит указатель на this
). Дополнительно мы еще передаем токен, который указывает тип структуры. Таким образом получается, что у нас вся структура "перезатерлась нулями" и значение поля A
равно нулю.
Microsoft представила выпуск открытой платформы .NET 8, созданной благодаря унификации продуктов.NET Framework,.NET Core и Mono. На основе.NET 8 можно создавать многоплатформенные приложения для браузера, облачных систем, рабочего стола, IoT‑устройств и мобильных платформ, используя единые библиотеки и общий процесс сборки, не зависящий от типа приложения.
Сборки.NET SDK 8,.NET Runtime 8 и ASP.NET Core Runtime 8 сформированы для Linux, macOS и Windows. .NET Desktop Runtime 8 поставляется только для Windows. Ветка .NET 8 отнесена к категории LTS и будет сопровождаться до ноября 2026 года. Связанные с проектом наработки распространяются под лицензией MIT.
В состав .NET 8 входит Runtime с JIT-компилятором RyuJIT, спецификации API, библиотеки WPF, Windows Forms, WinUI, Entity Framework, интерфейс командной строки dotnet, а также инструменты для разработки микросервисов, библиотек, серверных, графических и консольных приложений. Отдельно опубликованы стек для разработки web-приложений ASP.NET Core 8.0, ORM-прослойка Entity Framework Core 8.0 (драйверы имеются, в том числе, для SQLite и PostgreSQL), библиотека WPF 8 (Windows Presentation Foundation), фреймворк Windows Forms 8 для разработки GUI, платформа Aspire 8 для создания приложений Cloud Native, фреймворк MAUI 8 для разработки многоплатформенных интерфейсов пользователя, а также выпуски языков C# 12 и F# 8. Поддержка .NET 8.0 и C# 12 включена в свободный редактор кода Visual Studio Code.
Источник: OpenNET.
Расскажите своё мнение: на чём актуально писать более-менее крупную софтину под windows?
Работаю в проекте, нужна программа контроля доступа сотрудникам. БД + GUI + работа с устройством (перезаписывалка RFID меток). Проект - студенчесский стартап, так что пишем сами, не используем интеграции с крупными решениями.
Встал вопрос на чём писать. У меня компетенций в равной степени хватает на QT + C++, .NET + C# или Electron + js. Поэтому сложно определиться, важна скорость разработки и количество гайдов. По скорости выигрывает electron, а по гайдам .net.
По особенностям - много различных по содержанию окон, возможность работы с usb устройствами.
Если Вы шарите в современной разработке программ под виндовс, дайте, пожалуйста, своё мнение, с удовольствием пообщаюсь в комментах.
Заранее спасибо!
P.S. Надеюсь не вызвал постом ощущение что я не желаю думать свой бОшкой, просто есть внутренний крик души, подумал, почему бы не посоветоваться с умными хабрятами)
Доступен выпуск системы программирования PascalABC.NET 3.9.0, предлагающей редакцию языка программирования Pascal с поддержкой генерации кода для платформы .NET, возможностью использования библиотек .NET и дополнительными возможностями, такими как обобщённые классы, интерфейсы, перегрузка операций, λ-выражения, исключения, сборка мусора, методы расширения, безымянные классы и автоклассы. Проект главным образом ориентирован на применение в сфере образования и научных исследований. Сборка также включает среду разработки с подсказками по коду, автоформатированием, отладчиком, дизайнером форм и образцами кода для начинающих. Код проекта распространяется под лицензией LGPLv3.
Изменения в проекте:
подготовлена Linux-версия IDE PascalABC.NET;
добавлен модуль LightPT, обеспечивающий автоматическую проверку заданий, выполняемых учащимися;
добавлен модуль Мозаика для обучения дошкольников;
добавлен модуль TurtleWPF, реализующий черепашью графику на основе модуля GraphWPF;
в модуле Graph3D реализованы методы для работы в локальных координатах объекта;
в модуле Utils появилась функция Benchmark для замера времени работы участка кода;
на платформе Windows в окне вывода добавлена поддержка цветного вывода;
добавлены оптимизации (в несколько раз ускорена процедура Sort(a,x->x), ускорена работа с целыми числами в функции Abs, повышена эффективность применения атрибута [Cache]), разрешено использование именованных атрибутов при вызове подпрограмм.
Источник: OpenNET.

Мы в DotNetRu сообществе запустили новый открытый бесплатный курс "Rust для DotNet разработчиков".
Выходим онлайн по четвергам, неделю через неделю. Лекции можно посмотреть в записи по ссылке выше. Уже вышло 3 выпуска.
Следить на промо, обсудить выпуски и задать вопросы можно в соответствующем канале. Подключайтесь к прямым эфирам: можно сразу уточнить то что не совсем понятно.
P.S.: курс действительно открытый, донатов не просим, ничего не рекламируем. Я просто готовил для Вуза аналогичный курс и решил поделиться с DotNet сообществом, немного адаптировав. А то одни бывшие плюсовики в Rust чатиках, а чем мы, шарписты, хуже?
При установке .NET на линукс есть возможность использовать репозиторий либо официальный Ubuntu, либо от Microsoft (вариант со скриптом не рассматриваю)
Важный момент в том, что установка из этих 2 фидов происходит по-разному и в результате они могут конфликтовать
Принципиальное различие:
Ubuntu устанавливается в
/usr/lib/dotnet
Microsoft устанавливается в
/usr/share/dotnet
Когда я переходил из Ubuntu на Microsoft столкнулся с проблемой, что Rider, хоть и находит бинарник дотнета, не может запустить скомпилированное приложение. Выводилась ошибка следующего вида:
You must install .NET to run this application.
App: /home/user/repos/myapp/myapp
Architecture: x64
Host version: 7.0.0
.NET location: Not found
В итоге проблема оказалось следующей:
Исполняемый файл (запускаемый, не *.dll) пытается обнаружить путь до
dotnet
через переменную окруженияDOTNET_ROOT
.NET из Ubuntu устанавливает ее равной
/usr/lib/dotnet
. Но для репозитория Microsoft,dotnet
устанавливается в/usr/share/dotnet
. После установки из нового фида, переменная не обновляется
Эту проблему я решил обновив файл /etc/environment
- устанавливаю DOTNET_ROOT
вручную. Теперь файл выглядит так
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin"
DOTNET_ROOT="/usr/share/dotnet"
Надеюсь, помог тем, кто столкнется с этим в будущем
Вклад авторов
sidristij 3013.4XaocCPS 1863.6sahsAGU 1303.2olegchir 1250.6mezastel 1199.6SergVasiliev 1159.0SergeyT 1140.6phillennium 1081.6marshinov 888.2VBDUnit 862.0