Ответы пользователя по тегу .NET
  • Почему не работает приведение интерфейса в тип?

    ayazer
    @ayazer
    Sr. Software Engineer
    https://github.com/MassTransit/MassTransit/blob/5e...

    вот это не тот Fault про который вы думаете. Где-то в недрах GreenPipes есть еще один класс Fault. Так что никакий магии не случилось -

    using MassTransit;
    using System;
    
    namespace GreenPipes.DynamicInternal.MassTransit
    {
        public class MyFault<T> : Fault<T>
        {
            public T Message => throw new NotImplementedException();
    
            public Guid FaultId => throw new NotImplementedException();
    
            public Guid? FaultedMessageId => throw new NotImplementedException();
    
            public DateTime Timestamp => throw new NotImplementedException();
    
            public ExceptionInfo[] Exceptions => throw new NotImplementedException();
    
            public HostInfo Host => throw new NotImplementedException();
    
            public string[] FaultMessageTypes => throw new NotImplementedException();
        }
    
        public class Fault: MyFault<object>
        {
    
        }
    
    
        public class Program
        {
            static void Main(string[] args)
            {
                var fault = new Fault();
    
                string typename = fault.GetType().FullName; //GreenPipes.DynamicInternal.MassTransit.Fault
    
            }
        }
    }
    Ответ написан
    Комментировать
  • Зачем нужен StringBuilder? В каких случаях нужно использовать StringBuilder? Что мы выиграем используя StringBuilder?

    ayazer
    @ayazer
    Sr. Software Engineer
    смотрите лучше на пример когда у вас 1000 строк по 1мб.

    1000 строк по 1мб = 1Гб выделения памяти при загрузке, и еще (1+1000)/2 * 1000 ~ 500 Гб выделения памяти чтоб хранить промежуточные результаты (2мб сумма первых двух, 3мб сумма первых 3ех, 4мб сумма первых 4...)

    в случае со стрингбилдером у вас будет 1Гб выделения памяти памяти при загрузке + еще 1гб чтоб со всего этого собрать одну мега строку
    Ответ написан
    Комментировать
  • Как настроить docker?

    ayazer
    @ayazer
    Sr. Software Engineer
    Как уже написал Василий Банников - вы собираете проект, не весь солюшен. Потому и падает - оно не может найти свои зависимости. Ниже - пример, обрезаный с рабочего решения:

    FROM mcr.microsoft.com/dotnet/sdk:5.0 AS builder
    COPY . .
    WORKDIR /src
    
    RUN dotnet restore "SolutionName.sln" && \
            dotnet build "SolutionName.sln" -c Release -o /src/build && \
            cd /path/to/proj && \
            dotnet publish "ProjectToPublish.csproj" -c Release -o /src/publish
    
    FROM mcr.microsoft.com/dotnet/aspnet:5.0 AS final
    
    WORKDIR /app
    COPY --from=publish /src/publish .
    
    ENTRYPOINT ["dotnet", "ProjectName.dll"]


    вам по сути надо поправить
    RUN dotnet restore ./build/ShoppingCart.API.csproj
    RUN dotnet publish -c Release -o out


    Ну и да, судя по ошибке (описание которой я бы скопировал если бы вы вставляли текст, а не скриншоты) - у вас таки нет5. Потому и образы соотв. нужно использовать.
    Ответ написан
    1 комментарий
  • Какие есть варианты конвертации LE в BE на C#?

    ayazer
    @ayazer
    Sr. Software Engineer
    Комментировать
  • Как работают ObscuredTypes у Anticheat?

    ayazer
    @ayazer
    Sr. Software Engineer
    как-то так

    public struct WrappedInt
        {
            private readonly int _value;
    
            public WrappedInt(int val)
            {
                _value = val;
            }
    
            public static implicit operator WrappedInt(int val)
            {
                return new WrappedInt(val);
            }
    
           ... 
        }
    
    ....
    
    WrappedInt wrapped = 1;
    Ответ написан
    Комментировать
  • Как исправить несовместимость версий .NET?

    ayazer
    @ayazer
    Sr. Software Engineer
    у вас одна часть на .нет фреймворке, а вторая - на неткоре. Либо приведите все к чему-то одному, либо используйте нетстандарт нужной версии (тогда библиотека будет совместима и с нетфреймворком, и с неткором).

    как я понял с описания - на нетфрейморке у вас именно часть с интерфейсом, потому обновите TargetFramework во втором проекте. файл .sln должен выглядеть как-то

    <Project Sdk="Microsoft.NET.Sdk">
    
      <PropertyGroup>
        <TargetFramework>netstandard2.0</TargetFramework>
      </PropertyGroup>
    
      <ItemGroup>
        <PackageReference Include="..." Version="..." />
           ...
      </ItemGroup>
    
      ...
    
    </Project>
    Ответ написан
    Комментировать
  • Как задать Target framework на visual studio?

    ayazer
    @ayazer
    Sr. Software Engineer
    .нет кор не может таргетится на .нет фреймворк. это разные вещи. есть .нет стандард, и .нетовская библиотека совместимая с ним может быть без проблем собрана под .нет кор. Если такая возможность в студии и была, то скорее всего она означала мультитаргет на .неткор + нетстандард соотв. нужной версии .нет фреймворка. И в дальшнейшем ее выпилили чтоб не путать людей.

    Если нужно именно использование .нет фреймворка то надо создавать нет .нет кор проект, а просто десктоп/веб.

    Ну а вообще 4.6.1 совместим с нетстандартом2.0, потому их вполне реально использовать вместе, все популярные нюгеты уже давно имеют версии под все таргеты. Но если нет надобности/планов запускать все под линуксом (не через моно) - лучше везде использовать что-то одно.
    Ответ написан
  • Как разобраться с типами проектов .net core и где тут ARM?

    ayazer
    @ayazer
    Sr. Software Engineer
    То есть, насколько я понимаю, несмотря на то, что у меня выбрано приложение .net core, оно всё равно будет создано под целевую платформу .net framework? И, соответственно, будет работать только на винде?

    это было бы странно. нет, будет создан .нет кор проект.

    а что тогда во втором столбце, что еще за runtime?

    1 - сдк для разработчика, 2 - рантайм для клиента (на котором будет выполнятся приложение). если знакомы с той-же джавой то это JDK/JRE соотв.

    В чем различия между первым и вторым столбцом, нужно качать обе версии?

    нет, для пишке нужен только рантайм

    Почему в .net core пошло разделение на x64 и x86

    ну это в принципе разные архитектуры. такое разделение везде

    Раньше я мог писать приложение на винде x64, но при публикации указывать, что оно будет на x86. Что теперь с этим разделением делать?

    если не использовать прекомпиляцию ngen-ом то пофиг. указывайте x64-x86 (для полного фреймворка) или версию неткора в качестве целевой платформы, все остальное - проблема .нета

    На компьютере x64 нужно установить SDK x86, чтобы писать под x86 архитектуру?

    нет

    Что мне необходимо установить и как правильно скомпилировать приложение при разработке на винде?

    с 2.1 версии неткор поддерживает ARMv7/v8. потому на пишку нужно установить .неткор рантайм нужной верии и под него компилировать на рабочей машине. все остальное - проблемы рантайма. Собственно именно для этих целей он и был нужен.
    Ответ написан
    3 комментария
  • Можно ли начинать разработку проекта на ASP.NET Core?

    ayazer
    @ayazer
    Sr. Software Engineer
    В принципе использовать можно, надо надо быть готовым что иногда вылазят проблемы которых ты не ожидал бы работая с .нет фреймворком. Для того-же серверлесса на амазоновских лямбдах можно пока использовать только .нет кор 1.1, а он под линуксом в некоторых ситуациях дико течет. в 2.0 проблему пофиксили, но официальный ответ амазоновского суппорта по поводу миграции на 2.0 - "в роад мапе нету, ничем не можем пока помочь". Причем докер контейнера с окружением который крутится в амазоновской лямбде нету только под .нет кор, для остальных языков можно спокойно его скачать и потестировать у себя локально. В итоге ждем ре:инвент в декабре, есть надежда что таки будет анонс. Опять таки, анализ дампов .нет кор приложения которое работает на линуксе - gdb/lldb в зубы и вперед. Никаких привычных инструментов.
    Ответ написан
    Комментировать
  • Наследование об базового класса Object в c#?

    ayazer
    @ayazer
    Sr. Software Engineer
    если мы ничего явно не указываем - мы наследуем базовый Object. Если мы указываем какой-то класс - мы наследуем именно его (а он уже в свою очередь наследует базовый Object)
    Ответ написан
  • .NET неоправдано сжирает память?

    ayazer
    @ayazer
    Sr. Software Engineer
    1) алгоритмы сжатия изпользуют доп. память для генерации словарей. Размер словаря будет зависеть как от алгоритма сжатия, так и от данных которые надо сжать.
    2) для того чтоб освободить память от кучи хлама - можно сделать GC.Collect для инициализации сборщика мусора. В данном случае прийдеться делать GC.Collect(2), что достаточно дорогая операция.

    кроме того, следует помнить про нюансы сборки мусора для LOH. В отличии от SOH, для LOH не будет проводиться дефрагментация данных в памяти, а CLR будет просто пытаться переиспользовать освободившиеся куски. Потому вполне возможна ситуация когда память в куче вроде как есть, но CLR продолжает ее выделять для новых обьектов.
    Ответ написан