День шестьсот пятьдесят восьмой. #ЗаметкиНаПолях
Вернемся к основам C#:
Разница Между => и {get;} = для Свойств
Судя по примерам кода, которые я встречал несколько раз, оказывается, не все понимают разницу между
Вот пример кода:
Ответ: нет, это не одно и то же.
Свойство
В ранних версиях C# это выглядело бы так:
Вернемся к основам C#:
Разница Между => и {get;} = для Свойств
Судя по примерам кода, которые я встречал несколько раз, оказывается, не все понимают разницу между
=>
и { get; } =
для свойств.Вот пример кода:
public class CЭто одно и то же или нет?
{
public Foo A { get; } = new Foo();
public Foo B => new Foo();
}
Ответ: нет, это не одно и то же.
A
- это свойство только с аксессором get (также известное как свойство только для чтения или неизменяемое свойство). Когда создаётся экземпляр класса C
, это свойство инициализируется новым экземпляром класса Foo
, ссылка на который будет возвращаться с этого момента при обращении к свойству A
.Свойство
B
также определяет только аксессор, но на этот раз аксессор get содержит new Foo();
в теле. Иначе говоря, свойство B
возвращает новый экземпляр Foo
каждый раз, когда вы обращаетесь к нему.В ранних версиях C# это выглядело бы так:
public class CИсточник: https://www.tabsoverspaces.com/233844-back-to-csharp-basics-difference-between-and-get-for-properties
{
readonly Foo _a = new Foo();
public Foo A
{
get { return _a; }
}
public Foo B
{
get { return new Foo(); }
}
}
День шестьсот шестидесятый. #ЧтоНовенького #EFCore5
Вместе с .NET 5 выпущено множество обновлений. Про новшества в C#9 я писал в постах с тегом #CSharp9. Теперь рассмотрим, что нового в Entity Framework Core 5.0.
Отношение многие-ко-многим
EF Core 5.0 поддерживает отношения многие-ко-многим без явной привязки вспомогательной таблицы. Рассмотрим следующие сущности постов в блоге и тегов:
В отличие от EF6, EF Core также позволяет полностью настраивать вспомогательную таблицу. Например, приведенный ниже код настраивает отношение «многие-ко-многим» через вспомогательный объект, в котором вспомогательный объект также содержит свойство с полезными данными (
Вместе с .NET 5 выпущено множество обновлений. Про новшества в C#9 я писал в постах с тегом #CSharp9. Теперь рассмотрим, что нового в Entity Framework Core 5.0.
Отношение многие-ко-многим
EF Core 5.0 поддерживает отношения многие-ко-многим без явной привязки вспомогательной таблицы. Рассмотрим следующие сущности постов в блоге и тегов:
public class Post {Заметьте, что
public int Id { get; set; }
public string Name { get; set; }
public ICollection<Tag> Tags { get; set; }
}
public class Tag {
public int Id { get; set; }
public string Text { get; set; }
public ICollection<Post> Posts { get; set; }
}
Post
содержит коллекцию элементов Tag
и наоборот. EF Core 5.0 по соглашению распознает это как отношение многие-ко-многим. То есть добавлять специальный код в OnModelCreating
не требуется. Когда для создания базы данных используются миграции (или EnsureCreated
), EF Core автоматически создаст вспомогательную таблицу. Например, в SQL Server для этой модели EF Core сгенерирует:CREATE TABLE [Posts] (Создание и связывание экземпляров объектов
[Id] int NOT NULL IDENTITY,
[Name] nvarchar(max) NULL,
CONSTRAINT [PK_Posts] PRIMARY KEY ([Id])
);
CREATE TABLE [Tag] (
[Id] int NOT NULL IDENTITY,
[Text] nvarchar(max) NULL,
CONSTRAINT [PK_Tag] PRIMARY KEY ([Id])
);
CREATE TABLE [PostTag] (
[PostsId] int NOT NULL,
[TagsId] int NOT NULL,
…
);
Tag
и Post
приведёт к автоматическому обновлению вспомогательной таблицы. После вставки сообщений и тегов EF автоматически создаст строки во вспомогательной таблице. Для запросов Include и другие операции будут работать так же, как и для любых других отношений.В отличие от EF6, EF Core также позволяет полностью настраивать вспомогательную таблицу. Например, приведенный ниже код настраивает отношение «многие-ко-многим» через вспомогательный объект, в котором вспомогательный объект также содержит свойство с полезными данными (
PublicationDate
):protected override void OnModelCreating(ModelBuilder modelBuilder) {Источник: https://docs.microsoft.com/ru-ru/ef/core/what-is-new/ef-core-5.0/whatsnew#many-to-many
modelBuilder
.Entity<Post>()
.HasMany(p => p.Tags)
.WithMany(p => p.Posts)
.UsingEntity<PostTag>(
j => j
.HasOne(pt => pt.Tag)
.WithMany()
.HasForeignKey(pt => pt.TagId),
j => j
.HasOne(pt => pt.Post)
.WithMany()
.HasForeignKey(pt => pt.PostId),
j => {
j.Property(pt => pt.PublicationDate)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
j.HasKey(t => new { t.PostId, t.TagId });
});
}
День шестьсот шестьдесят первый. #ЗаметкиНаПолях
Как разрешить загрузку исполняемых файлов .exe с помощью UseStaticFiles
в ASP.NET Core
Иногда требуется возвращать клиенту небезопасные файлы, вроде исполняемых
Метод
- https://www.hanselman.com/blog/how-to-allow-executable-exe-files-to-be-downloaded-with-aspnet-core-and-usestaticfiles-middleware
- https://stackoverflow.com/questions/42831645/asp-net-core-download-exe-returns-404-error
Как разрешить загрузку исполняемых файлов .exe с помощью UseStaticFiles
в ASP.NET Core
Иногда требуется возвращать клиенту небезопасные файлы, вроде исполняемых
.exe
. ASP.NET Core по умолчанию очень сильно ограничен в целях безопасности, поэтому необходимо конкретно указывать, что разрешается возвращать. Простое включение в метод Configure()
файла Startup.cs
промежуточного ПО статических файлов:app.UseStaticFiles();не сработает для «необычных» для веб-среды типов, а вернёт ошибку 404.
Метод
UseStaticFiles
может принимать параметр для опций, поэтому можно обновить список соответствий mime-типов и расширений. Поможет следующая небольшая вспомогательная функция:private StaticFileOptions GetStaticFileOptions()Затем её можно передать в
{
var p = new FileExtensionContentTypeProvider();
p.Mappings[".exe"] = "application/octet-stream";
return new StaticFileOptions {
ContentTypeProvider = p
};
}
UseStaticFiles
:app.UseStaticFiles(GetStaticFileOptions());Ещё один вариант – разрешить возвращать файлы с незнакомым расширением, задав для неизвестных файлов mime-тип по умолчанию:
app.UseStaticFiles(new StaticFileOptionsИсточники:
{
// разрешаем возвращать неизвестные типы файлов
ServeUnknownFileTypes = true,
// задаём mime-тип для неизвестных файлов
DefaultContentType = "plain/text"
}
- https://www.hanselman.com/blog/how-to-allow-executable-exe-files-to-be-downloaded-with-aspnet-core-and-usestaticfiles-middleware
- https://stackoverflow.com/questions/42831645/asp-net-core-download-exe-returns-404-error
День шестьсот шестьдесят второй.
Сертификат Microsoft. Экзамен AZ-900
Сдал на досуге экзамен AZ-900. Потому что, почему бы и нет. Чтобы сдать бесплатно нужно посетить вебинар (очередной 1 и 2 декабря).
Это основные основы Azure. На вебинаре говорили, что он якобы требуется для получения других сертификатов, но в требованиях на сертификаты разработчика AZ-204, AZ-304, AZ-400 его нет. Зачем сдавать? Просто узнать о сервисах и структуре Azure, что там, как и зачем. Ещё вариант для тех, кто ни разу не сдавал экзамен Microsoft, но собирается - бесплатно попробовать, как он проходит.
Подготовиться можно
- в Microsoft Learn довольно сжато и сухо. Без опыта использования просто прочитать будет недостаточно. Надо как минимум залезть в Azure и потыкать каждый из сервисов (многие из которых платные),
- на Pluralsight есть сертификационный путь, где разбирают всё на примерах,
- плейлист на Youtube,
- или вот такая книжка.
Сертификат Microsoft. Экзамен AZ-900
Сдал на досуге экзамен AZ-900. Потому что, почему бы и нет. Чтобы сдать бесплатно нужно посетить вебинар (очередной 1 и 2 декабря).
Это основные основы Azure. На вебинаре говорили, что он якобы требуется для получения других сертификатов, но в требованиях на сертификаты разработчика AZ-204, AZ-304, AZ-400 его нет. Зачем сдавать? Просто узнать о сервисах и структуре Azure, что там, как и зачем. Ещё вариант для тех, кто ни разу не сдавал экзамен Microsoft, но собирается - бесплатно попробовать, как он проходит.
Подготовиться можно
- в Microsoft Learn довольно сжато и сухо. Без опыта использования просто прочитать будет недостаточно. Надо как минимум залезть в Azure и потыкать каждый из сервисов (многие из которых платные),
- на Pluralsight есть сертификационный путь, где разбирают всё на примерах,
- плейлист на Youtube,
- или вот такая книжка.
День шестьсот шестьдесят третий. #DeveloperPath
Проект «Путь Разработчика»
Наконец-то! Я добрался до разработки проекта, обещанного ещё летом. Теперь официально объявляю о запуске! Периодически буду выпускать на канале новости проекта.
Краткое описание идеи можно прочитать здесь.
Поскольку стоит задача параллельно изучить Azure и всё, что с этим связано (борды, пайплайны, и т.п.), я решил попробовать вести проект в Azure DevOps.
Поэтому все желающие, добро пожаловать!
https://dev.azure.com/sbenzenko/DeveloperPath
Проект открытый, посмотреть его могут все желающие, даже без авторизации. Авторизованные через аккаунт Microsoft или GitHub могут оставлять комментарии или добавиться в команду. Пока не знаю, как это делается, буду изучать по ходу))) Надеюсь, там для вас будет специальная кнопка. Если нет, пишите сюда, будем разбираться, как вас добавить.
Описание проекта есть на главной странице. В разделе Boards я создал пока 3 задачи (они же обсуждения):
- Description and UX/UI - описание того, что будет собой представлять сайт с точки зрения пользователя.
- Domain design - создание сущностей домена.
- Architecture design - разработка архитектуры.
Советую для начала ознакомиться с описанием на главной и с описанием в Description and UX/UI, чтобы примерно представлять, что будем создавать.
За основу взят шаблон «Clean Architecture» (ссылка на шаблон и ресурсы с информацией о нём в задаче Architecture design). В проект добавлен репозиторий, но в нём пока только «голый» шаблон и Readme с описанием проекта.
В общем, как уже писал раньше, приглашаются все желающие: архитекторы, разработчики, тестировщики, дизайнеры… Все, кто хочет изучить что-то новое или внести вклад в развитие сообщества. Особого уровня подготовки и навыков не требуется (это всё-таки учебный проект, все будем учиться потихоньку). Единственное, желательно бы немного знать английский. Общаться будем на русском, но подавляющее большинство источников информации (об архитектуре, .NET5, Azure и т.п.) англоязычные.
Жду вас на проекте!
UPD: Добавиться в команду, судя по всему, можно только по приглашению. Пишите email, по которому авторизуетесь в комментарии или в личку, я вас добавлю.
Проект «Путь Разработчика»
Наконец-то! Я добрался до разработки проекта, обещанного ещё летом. Теперь официально объявляю о запуске! Периодически буду выпускать на канале новости проекта.
Краткое описание идеи можно прочитать здесь.
Поскольку стоит задача параллельно изучить Azure и всё, что с этим связано (борды, пайплайны, и т.п.), я решил попробовать вести проект в Azure DevOps.
Поэтому все желающие, добро пожаловать!
https://dev.azure.com/sbenzenko/DeveloperPath
Проект открытый, посмотреть его могут все желающие, даже без авторизации. Авторизованные через аккаунт Microsoft или GitHub могут оставлять комментарии или добавиться в команду. Пока не знаю, как это делается, буду изучать по ходу))) Надеюсь, там для вас будет специальная кнопка. Если нет, пишите сюда, будем разбираться, как вас добавить.
Описание проекта есть на главной странице. В разделе Boards я создал пока 3 задачи (они же обсуждения):
- Description and UX/UI - описание того, что будет собой представлять сайт с точки зрения пользователя.
- Domain design - создание сущностей домена.
- Architecture design - разработка архитектуры.
Советую для начала ознакомиться с описанием на главной и с описанием в Description and UX/UI, чтобы примерно представлять, что будем создавать.
За основу взят шаблон «Clean Architecture» (ссылка на шаблон и ресурсы с информацией о нём в задаче Architecture design). В проект добавлен репозиторий, но в нём пока только «голый» шаблон и Readme с описанием проекта.
В общем, как уже писал раньше, приглашаются все желающие: архитекторы, разработчики, тестировщики, дизайнеры… Все, кто хочет изучить что-то новое или внести вклад в развитие сообщества. Особого уровня подготовки и навыков не требуется (это всё-таки учебный проект, все будем учиться потихоньку). Единственное, желательно бы немного знать английский. Общаться будем на русском, но подавляющее большинство источников информации (об архитектуре, .NET5, Azure и т.п.) англоязычные.
Жду вас на проекте!
UPD: Добавиться в команду, судя по всему, можно только по приглашению. Пишите email, по которому авторизуетесь в комментарии или в личку, я вас добавлю.
.NET Разработчик pinned «День шестьсот шестьдесят третий. #DeveloperPath Проект «Путь Разработчика» Наконец-то! Я добрался до разработки проекта, обещанного ещё летом. Теперь официально объявляю о запуске! Периодически буду выпускать на канале новости проекта. Краткое описание идеи…»
День шестьсот шестьдесят четвёртый. #юмор
Как раз в тему стартовавшего проекта.
Как раз в тему стартовавшего проекта.
День шестьсот шестьдесят пятый.
Экзамены Microsoft онлайн: чего ожидать и как подготовиться
Довольно много вопросов мне задавали по процедуре сдачи экзамена. Я сдавал экзамен онлайн под наблюдением. Также это можно сделать очно в центре тестирования, но сейчас не об этом.
Большинство проблем, как говорят в Microsoft, сводится к несоответствию системных требований, недостаточной скорости интернета и недостаточному пониманию процедуры прохождения онлайн-экзамена под наблюдением. Поэтому вот несколько советов.
1. Прочитайте описание и посмотрите видео в документации. Хотя некоторые требования могут показаться чрезмерными, на это есть веские причины. Главная цель экзаменаторов – обеспечить максимально равные условия для всех сдающих. Поэтому вы должны находиться в максимально изолированном помещении. Также необходимо обеспечить безопасность и целостность процесса сдачи там, где экзаменаторы не могут контролировать оборудование, запущенное на нём ПО, скорость интернета и т.п.
2. Запустите системный тест на том же компьютере и в том же месте, где вы будете проходить экзамен. Тест проверит, соответствуют ли ваш компьютер, местоположение и подключение к интернету системным требованиям. Довольно часто кандидаты сдают экзамен не там, где проходили тест, и сталкиваются с проблемами. Тест нужно запустить заранее (лучше до регистрации на экзамен), чтобы при возникновении проблем было время их решить.
На компьютер скачивается специальная программа для тестирования, которая проведёт тест железа и ПО, микрофона и камеры. Затем вам будет предложено ответить на тестовый вопрос. На это время нужно закрыть все работающие приложения.
3. Разберитесь в правилах. Перед экзаменом нужно подтвердить свою личность, сфотографировав паспорт (лучше загран), а также сфотографировать комнату со всех сторон. После этого телефон должен быть убран. На столе не должно быть еды, напитков, бумаги, книг, телефона или других вещей. Кроме того, вам будет предложено снять часы. Ни по какой причине нельзя вставать из-за стола. Если вас кто-то прервал, или наблюдатель заподозрит, что кто-то посторонний находится в комнате, ваш экзамен будет прекращён без возмещения оплаты. Вы не можете читать вопросы вслух или закрывать лицо. (Наблюдатель не может знать, записывает ли тестируемый вопросы или, возможно, читает их вслух кому-то, кто ему помогает.) Эти условия максимально приближены к условиям сдачи в центре тестирования.
Помните, что в среде, которую экзаменаторы не могут контролировать (ваш дом или офис), они пытаются имитировать тот же уровень безопасности и строгости в процессе тестирования, что и в центрах тестирования. Все эти сложности и правила направлены на подтверждение объективности результатов экзамена и, как следствие, ваших сертификатов. Ведь если кто-то получит преимущество за счёт возможности списать или каким-то другим способом узнать ответы, это подрывает ценность сертификации в целом.
4. Потренируйтесь на бесплатном экзамене. Я уже писал ранее про экзамен AZ-900 и про то, что его можно сдать бесплатно, посетив вебинар. Кстати, вот сессия на русском 14-15 декабря.
Источник: https://techcommunity.microsoft.com/t5/microsoft-learn-blog/online-proctored-exams-what-to-expect-and-how-to-prepare/ba-p/1469424
Экзамены Microsoft онлайн: чего ожидать и как подготовиться
Довольно много вопросов мне задавали по процедуре сдачи экзамена. Я сдавал экзамен онлайн под наблюдением. Также это можно сделать очно в центре тестирования, но сейчас не об этом.
Большинство проблем, как говорят в Microsoft, сводится к несоответствию системных требований, недостаточной скорости интернета и недостаточному пониманию процедуры прохождения онлайн-экзамена под наблюдением. Поэтому вот несколько советов.
1. Прочитайте описание и посмотрите видео в документации. Хотя некоторые требования могут показаться чрезмерными, на это есть веские причины. Главная цель экзаменаторов – обеспечить максимально равные условия для всех сдающих. Поэтому вы должны находиться в максимально изолированном помещении. Также необходимо обеспечить безопасность и целостность процесса сдачи там, где экзаменаторы не могут контролировать оборудование, запущенное на нём ПО, скорость интернета и т.п.
2. Запустите системный тест на том же компьютере и в том же месте, где вы будете проходить экзамен. Тест проверит, соответствуют ли ваш компьютер, местоположение и подключение к интернету системным требованиям. Довольно часто кандидаты сдают экзамен не там, где проходили тест, и сталкиваются с проблемами. Тест нужно запустить заранее (лучше до регистрации на экзамен), чтобы при возникновении проблем было время их решить.
На компьютер скачивается специальная программа для тестирования, которая проведёт тест железа и ПО, микрофона и камеры. Затем вам будет предложено ответить на тестовый вопрос. На это время нужно закрыть все работающие приложения.
3. Разберитесь в правилах. Перед экзаменом нужно подтвердить свою личность, сфотографировав паспорт (лучше загран), а также сфотографировать комнату со всех сторон. После этого телефон должен быть убран. На столе не должно быть еды, напитков, бумаги, книг, телефона или других вещей. Кроме того, вам будет предложено снять часы. Ни по какой причине нельзя вставать из-за стола. Если вас кто-то прервал, или наблюдатель заподозрит, что кто-то посторонний находится в комнате, ваш экзамен будет прекращён без возмещения оплаты. Вы не можете читать вопросы вслух или закрывать лицо. (Наблюдатель не может знать, записывает ли тестируемый вопросы или, возможно, читает их вслух кому-то, кто ему помогает.) Эти условия максимально приближены к условиям сдачи в центре тестирования.
Помните, что в среде, которую экзаменаторы не могут контролировать (ваш дом или офис), они пытаются имитировать тот же уровень безопасности и строгости в процессе тестирования, что и в центрах тестирования. Все эти сложности и правила направлены на подтверждение объективности результатов экзамена и, как следствие, ваших сертификатов. Ведь если кто-то получит преимущество за счёт возможности списать или каким-то другим способом узнать ответы, это подрывает ценность сертификации в целом.
4. Потренируйтесь на бесплатном экзамене. Я уже писал ранее про экзамен AZ-900 и про то, что его можно сдать бесплатно, посетив вебинар. Кстати, вот сессия на русском 14-15 декабря.
Источник: https://techcommunity.microsoft.com/t5/microsoft-learn-blog/online-proctored-exams-what-to-expect-and-how-to-prepare/ba-p/1469424
День шестьсот шестьдесят шестой. #ЗаметкиНаПолях #CSharp9
Атрибуты для Свойств Записей в C# 9
Записи обеспечивают простое создание неизменяемых объектов, особенно при использовании первичного конструктора:
Решение заключается в указании цели, к которой применяется атрибут. Как сказано в документации Microsoft:
Атрибуты могут быть применены к синтезированному автоматическому свойству или его вспомогательному полю, используя указатель цели атрибута property: или field: соответственно для атрибутов, синтаксически применяемых к соответствующему параметру записи.
В итоге мы получим следующую запись:
Теперь можно сериализовать нашу запись и получить желаемый результат:
Атрибуты для Свойств Записей в C# 9
Записи обеспечивают простое создание неизменяемых объектов, особенно при использовании первичного конструктора:
public record User(string Name, DateTime DOB);Это значительно сокращает код. Рассмотрим ситуацию, когда вы хотите сериализовать запись, чтобы получить следующий результат:
{"User":"Jon Smith","DateOfBirth":"1970-01-01T00:00:00"}Заметьте, что ключи не совпадают с именами свойств записи. Обычно это потребовало бы добавления к свойствам записи атрибута
JsonPropertyAttribute
. То есть в полной записи это выглядело бы так:public record User {При использовании первичного конструктора есть соблазн сделать аналогично:
[JsonProperty("User")]
public string Name{get;init;}
[JsonProperty("DateOfBirth")]
public DateTime DOB{get;init;}
}
public record User(Но это неверно. В этом случае атрибуты добавятся к параметрам конструктора, а не к свойствам.
[JsonProperty("User")]
string Name,
[JsonProperty("DateOfBirth")]
DateTime DOB
);
Решение заключается в указании цели, к которой применяется атрибут. Как сказано в документации Microsoft:
Атрибуты могут быть применены к синтезированному автоматическому свойству или его вспомогательному полю, используя указатель цели атрибута property: или field: соответственно для атрибутов, синтаксически применяемых к соответствующему параметру записи.
В итоге мы получим следующую запись:
public record User(
[property:JsonProperty("User")]
string Name,
[property:JsonProperty("DateOfBirth")]
DateTime DOB
);
Теперь можно сериализовать нашу запись и получить желаемый результат:
var data = new User("Jon Smith",new DateTime(1970,1,1));Источник: https://www.c-sharpcorner.com/blogs/attributes-for-record-properties-in-c-sharp-9
var serializedData = JsonConvert.SerializeObject(data);
// Вывод
{"User":"Jon Smith","DateOfBirth":"1970-01-01T00:00:00"}
День шестьсот шестьдесят седьмой. #ЧтоНовенького
Повышение продуктивности в Visual Studio
Сегодня расскажу вам о некоторых новых фишках в Visual Studio.
Улучшения инструментов
Начиная с .NET 5.0, анализаторы Roslyn включены в .NET SDK. Анализаторы Roslyn включены по умолчанию для проектов, предназначенных для .NET 5.0 или более поздних версий. Вы можете использовать свойства проекта для включения/отключения анализаторов .NET. Щёлкните правой кнопкой мыши на проекте в проводнике решения и выберите Properties (Свойства). Затем выберите вкладку Code Analysis (Анализ кода), где вы можете установить или снять флажок Enable .NET analyzers (Включить анализаторы .NET). См. картинку 1 ниже.
Ещё одна интересная особенность - встроенные подсказки имён параметров, а также типов неявно объявленных переменных, аргументов методов и параметров лямбда-выражений. Включить эту опцию можно в меню Tools > Options > Text Editor > C# > Advanced (Инструменты > Параметры > Текстовый редактор > C# > Дополнительно) и выбрать Display inline parameter name hints (Отображать подсказки имён параметров) и Display inline type hints (Отображать подсказки типов). Вы также можете использовать сочетание клавиш
Добавление аккаунта GitHub
Вы можете добавить аккаунт GitHub в Visual Studio наряду с аккаунтом Microsoft в диалоговом окне Account Settings (Настройки учетной записи) - File > Account Settings… (Файл > Настройки учетной записи…). Кроме того, его можно добавить, например, при создании нового репозитория Git. См. картинку 3 ниже. Зачем нужно глобальное добавление аккаунта Git в Visual Studio, пока не понятно. Возможно, в будущем будет добавлен какой-то функционал.
Источники:
- https://devblogs.microsoft.com/dotnet/whats-new-in-net-productivity/
- https://devblogs.microsoft.com/visualstudio/github-accounts-are-now-integrated-into-visual-studio-2019/
Повышение продуктивности в Visual Studio
Сегодня расскажу вам о некоторых новых фишках в Visual Studio.
Улучшения инструментов
Начиная с .NET 5.0, анализаторы Roslyn включены в .NET SDK. Анализаторы Roslyn включены по умолчанию для проектов, предназначенных для .NET 5.0 или более поздних версий. Вы можете использовать свойства проекта для включения/отключения анализаторов .NET. Щёлкните правой кнопкой мыши на проекте в проводнике решения и выберите Properties (Свойства). Затем выберите вкладку Code Analysis (Анализ кода), где вы можете установить или снять флажок Enable .NET analyzers (Включить анализаторы .NET). См. картинку 1 ниже.
Ещё одна интересная особенность - встроенные подсказки имён параметров, а также типов неявно объявленных переменных, аргументов методов и параметров лямбда-выражений. Включить эту опцию можно в меню Tools > Options > Text Editor > C# > Advanced (Инструменты > Параметры > Текстовый редактор > C# > Дополнительно) и выбрать Display inline parameter name hints (Отображать подсказки имён параметров) и Display inline type hints (Отображать подсказки типов). Вы также можете использовать сочетание клавиш
Ctrl+Alt
для краткого показа подсказок. См. картинку 2 ниже.Добавление аккаунта GitHub
Вы можете добавить аккаунт GitHub в Visual Studio наряду с аккаунтом Microsoft в диалоговом окне Account Settings (Настройки учетной записи) - File > Account Settings… (Файл > Настройки учетной записи…). Кроме того, его можно добавить, например, при создании нового репозитория Git. См. картинку 3 ниже. Зачем нужно глобальное добавление аккаунта Git в Visual Studio, пока не понятно. Возможно, в будущем будет добавлен какой-то функционал.
Источники:
- https://devblogs.microsoft.com/dotnet/whats-new-in-net-productivity/
- https://devblogs.microsoft.com/visualstudio/github-accounts-are-now-integrated-into-visual-studio-2019/
День шестьсот шестьдесят восьмой.
dotnet-outdated устарел
dotnet-outdated – довольно полезный инструмент командной строки для проверки устаревших зависимостей в вашем проекте. Но теперь он… устарел. Хотя это не проблема, просто нужно его заменить. Если он уже был у вас установлен, выполните:
На картинке выше результат работы
Источник: https://www.hanselman.com/blog/your-dotnet-outdated-is-outdated-update-and-help-keep-your-net-projects-up-to-date
dotnet-outdated устарел
dotnet-outdated – довольно полезный инструмент командной строки для проверки устаревших зависимостей в вашем проекте. Но теперь он… устарел. Хотя это не проблема, просто нужно его заменить. Если он уже был у вас установлен, выполните:
dotnet tool uninstall --global dotnet-outdatedА для установки:
dotnet tool install --global dotnet-outdated-toolДа, название изменилось, но инструмент остался прежним, и его по-прежнему можно вызвать через
dotnet outdated
из папки решения.На картинке выше результат работы
dotnet outdated
на недавно созданном проекте. Заметьте, что разным цветом показаны обновления основной версии, и более младших. Надо будет обновиться. Что, кстати, можно сделать там же, вызвав инструмент с параметром -u
.Источник: https://www.hanselman.com/blog/your-dotnet-outdated-is-outdated-update-and-help-keep-your-net-projects-up-to-date
День шестьсот шестьдесят девятый. #Оффтоп
IT собеседование. Как понять, что компания Вам не подходит?
Продолжим разговоры по воскресеньям. В основу сегодняшней темы лёг очередной ролик от Сергея Немчинского. Я всегда говорю, что собеседование на то и собеседование, что задавать вопросы могут обе стороны. Как компания хочет что-то узнать о вас, так и вам лучше узнать побольше о месте, где вам предстоит работать. Просто чтобы не тратить ни своё время, ни время и деньги работодателя. Конечно, есть испытательный срок, и можно просто встать и уйти в любой момент, если что-то не устраивает. Но не делайте так. Лучше по максимуму исключить для себя неприятные сюрпризы ещё на стадии собеседования. Несколько вопросов, кстати, лучше подготовить заранее и ранжировать по важности лично для вас. От того, с чем вы категорически отказываетесь мириться до просто интересующих вас деталей.
Помимо вопроса про (как это сейчас принято говорить) вознаграждение, можно задать и менее очевидные.
1. Чем конкретно вы будете заниматься?
*** тут должна быть шутка про то, что на собеседовании просят развернуть бинарное дерево, а потом на работе сделать кнопочку побольше ***
Хотя это и некоторое преувеличение, но стек технологий компании, перечисленный в вакансии, вовсе не значит, что лично вы будете этим заниматься.
2. Где конкретно вы будете работать? Это отдельный офис (чего всем желаю), коворкинг или полуподвальная комнатка без окон, под завязку набитая людьми?
3. С кем вы будете работать? Собеседовать вас могут милые, приятные люди, а вот непосредственные коллеги могут от них сильно отличаться. Конечно, узнать коллег по описанию или по первому впечатлению невозможно. Это как раз тот случай, когда оправдано уйти на испытательном сроке. Но не молча, а объяснив руководителю, в чём причина.
4. Переработки. Все мы (я надеюсь) занимаемся любимым делом не по принуждению. «Если нам перестанут платить за работу, мы готовы доплачивать, лишь бы программировать». Да, да, да, всё это понятно. Но постоянные переработки приводят к быстрому эмоциональному выгоранию. Вам оно надо?
5. Карьерный рост. Канонический вопрос, который задают кандидатам: «Кем вы видите себя через Х лет?» - может быть задан и в обратную сторону. Кем меня видит компания через Х лет? Возможны ли повышения? Как этого добиться? Как высоко можно подняться?
Ну и так далее обо всём, что для вас важно? Многозадачность (переброски с проекта на проект), командировки, возможность удалённой работы и т.п.
О чём вы спрашивали на собеседовании? Что для вас является наиболее важным критерием, таким, что вы готовы отказаться от места, если этого нет? От какой работы отказывались прямо на собеседовании? Кстати, там в комментариях к видео Сергея есть несколько интересных историй.
Давайте обсудим. Жду ваших комментариев.
IT собеседование. Как понять, что компания Вам не подходит?
Продолжим разговоры по воскресеньям. В основу сегодняшней темы лёг очередной ролик от Сергея Немчинского. Я всегда говорю, что собеседование на то и собеседование, что задавать вопросы могут обе стороны. Как компания хочет что-то узнать о вас, так и вам лучше узнать побольше о месте, где вам предстоит работать. Просто чтобы не тратить ни своё время, ни время и деньги работодателя. Конечно, есть испытательный срок, и можно просто встать и уйти в любой момент, если что-то не устраивает. Но не делайте так. Лучше по максимуму исключить для себя неприятные сюрпризы ещё на стадии собеседования. Несколько вопросов, кстати, лучше подготовить заранее и ранжировать по важности лично для вас. От того, с чем вы категорически отказываетесь мириться до просто интересующих вас деталей.
Помимо вопроса про (как это сейчас принято говорить) вознаграждение, можно задать и менее очевидные.
1. Чем конкретно вы будете заниматься?
*** тут должна быть шутка про то, что на собеседовании просят развернуть бинарное дерево, а потом на работе сделать кнопочку побольше ***
Хотя это и некоторое преувеличение, но стек технологий компании, перечисленный в вакансии, вовсе не значит, что лично вы будете этим заниматься.
2. Где конкретно вы будете работать? Это отдельный офис (чего всем желаю), коворкинг или полуподвальная комнатка без окон, под завязку набитая людьми?
3. С кем вы будете работать? Собеседовать вас могут милые, приятные люди, а вот непосредственные коллеги могут от них сильно отличаться. Конечно, узнать коллег по описанию или по первому впечатлению невозможно. Это как раз тот случай, когда оправдано уйти на испытательном сроке. Но не молча, а объяснив руководителю, в чём причина.
4. Переработки. Все мы (я надеюсь) занимаемся любимым делом не по принуждению. «Если нам перестанут платить за работу, мы готовы доплачивать, лишь бы программировать». Да, да, да, всё это понятно. Но постоянные переработки приводят к быстрому эмоциональному выгоранию. Вам оно надо?
5. Карьерный рост. Канонический вопрос, который задают кандидатам: «Кем вы видите себя через Х лет?» - может быть задан и в обратную сторону. Кем меня видит компания через Х лет? Возможны ли повышения? Как этого добиться? Как высоко можно подняться?
Ну и так далее обо всём, что для вас важно? Многозадачность (переброски с проекта на проект), командировки, возможность удалённой работы и т.п.
О чём вы спрашивали на собеседовании? Что для вас является наиболее важным критерием, таким, что вы готовы отказаться от места, если этого нет? От какой работы отказывались прямо на собеседовании? Кстати, там в комментариях к видео Сергея есть несколько интересных историй.
Давайте обсудим. Жду ваших комментариев.