RSS-канал «Форум '.NET' на RSDN»
Доступ к архиву новостей RSS-канала возможен только после подписки.
Как подписчик, вы получите в своё распоряжение бесплатный веб-агрегатор новостей доступный с любого компьютера в котором сможете просматривать и группировать каналы на свой вкус. А, так же, указывать какие из каналов вы захотите читать на вебе, а какие получать по электронной почте.
Подписаться на другой RSS-канал, зная только его адрес или адрес сайта.
Код формы подписки на этот канал для вашего сайта:
Последние новости
Clr via C#
2024-03-29 13:04 peer
Что посоветуете, кто читал что?
Детект прав админа у пользователя
2024-03-28 19:20 VladD2
Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).
Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.
Как проще всего это сделать?
На входе есть имя учетки (включая домен или имя компа) и пароль.
Нашел вот такой пусть:
bool valid = false;
using (var context = new PrincipalContext(ContextType.Machine))
{
valid = context.ValidateCredentials(userName, password);
var grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Administators");
var user = UserPrincipal.FindByIdentity(context, userName);
foreach (Principal p in user.GetAuthorizationGroups())
{
Debug.WriteLine(p);
if (p.ToString() == "Administrators")
{
// Administrator
}
}
}
Но как-то перебором искать так себе идея. Плюс приходится использовать нюгет-пакет System.DirectoryServices.AccountManagement, что добавляет лишнего веса и хлопот.
Новости C#13. params
2024-03-14 18:44 rameel
void M(params IEnumerable<int> numbers);
void M(params ReadOnlySpan<int> numbers);
https://x.com/jcouv/status/1767967748259545522
ЗЫ. Из proposal вытекает, что поддерживаются также
* System.Span<T>
* System.Collections.Generic.IEnumerable<T>,
System.Collections.Generic.IReadOnlyCollection<T>,
System.Collections.Generic.IReadOnlyList<T>,
System.Collections.Generic.ICollection<T>,
System.Collections.Generic.IList<T>
* Класс или структура, который реализует IEnumerable, если есть доступный конструктор без аргументов, и экземплярный (не extension) метод Add.
* Класс или структура со статическим методом Create.
Передать this в виде object
2024-03-14 12:27 drVanо
struct Point
{
public int x;
public int y;
public Point(int a, int b)
{
x = a;
y = b;
}
public void Move(int a, int b)
{
MoveObject(this, a, b);
Console.WriteLine("point from this: {0}.{1}", x, y);
}
static void MoveObject(object obj, int a, int b)
{
var p = (Point)obj;
p.x += a;
p.y += b;
Console.WriteLine("point from object: {0}.{1}", p.x, p.y);
}
}
...
public static void Main()
{
var p = new Point(1, 2);
p.Move(9, 8);
}
Сейчас в MoveObject получаем копию Point, а не ссылку на начальную структуру.
крепостные объекты
2024-03-07 12:24 Qulac
Не крутится progressBar
2024-03-07 10:36 Funny Rabbit
private void btnSelectFileWithVins_Click(object sender, EventArgs e)
{
if (txtFixStation.Text == "")
{
MessageBox.Show("Выберите станцию.");
return;
}
if (ofdVIN.ShowDialog(this) == DialogResult.OK)
{
backgroundWorker.RunWorkerAsync(progressBar.Value);
Cursor = Cursors.WaitCursor;
Tuple<int, int> rowsProcessed = WriteVins(ofdVIN.FileName);
Cursor = Cursors.Default;
MessageBox.Show("Успешкно обработано - " + rowsProcessed.Item1.ToString() + " строк. Ошибок - " + rowsProcessed.Item2.ToString());
}
}
private void backgroundWorker_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e)
{
if (progressBar.Value == progressBar.Maximum)
{
progressBar.Value = progressBar.Minimum;
}
}
private void backgroundWorker_RunWorkerCompleted(object sender, System.ComponentModel.RunWorkerCompletedEventArgs e)
{
progressBar.Value = progressBar.Minimum;
}
private void backgroundWorker_ProgressChanged(object sender, System.ComponentModel.ProgressChangedEventArgs e)
{
progressBar.Value = e.ProgressPercentage;
}
Почему то не крутится прогрессбар. В чем может быть проблема?
Unsafe mem mapping
2024-02-27 10:19 Sаныч
[StructLayout(LayoutKind.Explicit)]
struct NativeStruct
{
[FieldOffset(0)]
public int Field1;
[FieldOffset(4)]
public uint Field2;
// дальше
}
fixed (byte* map = &_readBuffer[0])
{
return *(NativeStruct*)map;
}
Читал про Span<T> но не понял как его применить для задачи, если он вообще применим для такого.
middleware exception
2024-02-26 22:28 undo75
/// <summary>
/// Отлов ошибок.
/// </summary>
public class ExceptionMiddleware : ExceptionFilterAttribute
{
public bool AllowMultiple => false;
public override void OnException(HttpActionExecutedContext context)
{
var actionContext = context.ActionContext;
if (actionContext != null)
{
// в UserAuthorize и UserRight атрибутах кидаются такие ошибки, и до пользователя доходила 500 ошибка
if (context.Exception is HttpResponseException ex &&
(ex.Response.StatusCode == HttpStatusCode.Unauthorized || ex.Response.StatusCode == HttpStatusCode.Forbidden))
{
throw context.Exception;
}
if (context.Exception is NotFoundException)
{
throw new HttpResponseException(actionContext.Request.CreateErrorResponse(HttpStatusCode.NotFound, context.Exception.Message));
}
if (context.Exception is AccessDeniedException)
{
throw new HttpResponseException(actionContext.Request.CreateErrorResponse(HttpStatusCode.Forbidden, context.Exception.Message));
}
и т.д.
стоит цель из сервиса пробросить в апишку (контроллер) чтоб он соотвственно вернул throw new HttpResponseException . можно на пальцах как это реализуется?
Константы. Класс или структура?
2024-02-21 07:41 Разраб
public static class ClassConst
{
public const int Zero = 0;
}
public struct StructConst
{
public const int Zero = 0;
}
отладка на железном линухе
2024-02-11 09:35 novitk
Я тут играюсь с F# и мне оно даже нравится, но как-то неуютно. MS собирается это исправлять?
Ошибка при публикации проекта
2024-02-07 12:34 Funny Rabbit
"C:\Users\gw07007298\source\repos\mes\GWM.MES.App\bin\Debug\app.publish\Application Files\GWM.MES.App_1_2_97_13\GWM.MES.Common.dll.deploy" в "\\mes-test.hmmr.ru\mes-test-update\Application Files\GWM.MES.App_1_2_97_13\GWM.MES.Common.dll.deploy". Не удалось добавить "Application Files/GWM.MES.App_1_2_97_13/GWM.MES.Common.dll.deploy" к веб-сайту. Не удается добавить файл "Application Files\GWM.MES.App_1_2_97_13\GWM.MES.Common.dll.deploy". Системе не удается найти указанный путь. GWM.MES.App 1
В чем может быть проблема?
Профилирование .net 6.0 (и выше) на Linux(Ubunta).
2024-02-05 22:38 Sharov
А кто как профилирует .net 6.0 приложение под линупсом? Есть какие-нибудь инструменты у мс или jb для этого?
Нужно что-то типа dotmemory и dottrace. А какие существующие утилиты для линукса могут помочь в профилирования
dotnet приложений? Или особой разницы в поведении под win и линукс у CLR и платформы (dotnet) в целом нету, соотв.
можно результаты win эктрапалировать на линупс?
Заранее благодарю.
Лямбда и модификаторы параметра (ref/out) — новости
2024-02-05 16:25 _FRED_
Надо же, 12 лет почти прошло, а работа движется спека ждёт обсуждения // Мораль: смысл заводить тикеты есть всегда, не пренебрегайте
Хотят разрешить все возможные модификаторы:
Allow lambda parameter declarations with modifiers (in / ref / out / ref readonly / scoped / scoped ref / params) to be declared without requiring their type names.
Класс не зарегистрирован 8040154
2024-02-05 11:12 Funny Rabbit
docx. Добавить картинку в колонтитул
2024-02-03 13:58 BlackEric
Нужно в уже существующий нижний колонтитул docx файла добавить изображение. При этом в колонтитуле уже может быть текст.
Хотелось бы что бы это работало на сервере без использования установленного ворда.
Какие библиотеки использовать и нет ли примера кода?
Убрать тормоза сервиса
2024-02-03 12:19 RushDevion
Нужна помощь зала.
Имеем сервис: .net core, асинхронное (async/await) REST API которое читает/пишет из БД или кэша (Redis), фоновый обработчик на Hangfire, крутится на ubuntu.
Нагрузка слабая: ~4-7 rpc днем, по ночам падает до 0.1-1 rpc.
Есть логи и базовые метрики (память, cpu, кол-во запросов, время ответа и т.п.).
Память держится в пределах 40-100 Мб, треды — в пределах 8-12 штук.
95% по времени ответа ~10-50 мс (меряется именно время работы хендлера, без чтения/записи запроса/ответа).
Но, когда нагрузка спадает, то 99% начинает давать пики в 400-1200мс.
Заметна четкая корреляция с rpc: при штатной нагрузке отвечаем быстро, нагрузка ушла вниз и потом (спустя время) вверх — появляется пик.
Это буквально единичные запросы, ~0.2% от общей массы.
По логам они ничем не отличаются от обычных: sql запросы и чтение/запись из кэша отрабатывают так же быстро, как у остальных.
Было предположение, что дело в тред.пуле.
Типа когда нагрузка уходит, шедулер начинает прибивать лишние треды.
Соответственно, когда после понижения идет рост rpc, шедулеру нужно время на раскачку.
Подкрутил настройку minWorkerThreads в пуле, пики просадки стали чуть ниже — 300-700мс, но совсем не исчезли.
Не то, чтобы это было критично, но все же хочется убрать и эти 0.2% тормозов, т.к. объективных причин для них не видно.
Вот как бы их отследить, чтобы понять, в чем дело?
Что-то типа perfcollect/dotnet-trace collect, но не для всего подряд, а только для медленных запросов.
Есть идеи?