Задать вопрос
  • Как реализовывают "платные" библиотеки в dotnet?

    @KislyFan Автор вопроса
    Александр, прочитал ваш комментарий, получается что если если мы отдаем библиотеку после регистрации (как тот же ExtJs), то можем собирать библиотеку на стороне сервера, и засовывать в assembly дату сборки или окончания триала.. А новая native сборка насколько легко поддается реверсинжинирингу?
  • Как реализовывают "платные" библиотеки в dotnet?

    @KislyFan Автор вопроса
    Александр, обфускация обфускацией, это поняно. Не ясно как обычно реализован триалтный период и все такое.
  • Как повторить набор анимаций?

    @KislyFan Автор вопроса
    Irkov, уже решил именно так. Одна анимация на всех + задержка на длительность хода. Регулируя длительность остановок можно получить две полноценных анимации, и еще одну ущербную анимацию сворачивания в один квадрат.
  • Как повторить набор анимаций?

    @KislyFan Автор вопроса
    Ankhena, окей записал в один кейфрейм. Теперь другая проблема, они все двигаются одновременно. Не пойму как задать индивидуально задержку в нужном порядке ?
  • Как получить значение ParameterExpression?

    @KislyFan
    iRumba, Ну что я могу сказать. Используйте обьекты фильтров, их поддерживать легче.
  • Как получить значение ParameterExpression?

    @KislyFan
    iRumba, так в том и суть. При нормальной работе LINQ выражение должно или преобразоваться к IEnumerable (тоесть LINQ to Object) или к алиасу sql функции. Я так понимаю что у вас есть функция, которую вы хотите засменить на Expression. В этом случае чтобы не заниматься вот этими извращениями, нужно было заранее собрать expressionы и передать в DbContext.DbSet<>.Where по условию.
    Ну или хз, надо было лучше обьяснять, или привести синтетический пример.
  • Паттерн Unit Of Work - Repository и обработка исключений?

    @KislyFan Автор вопроса
    Andrei Brizhak, не совсем понятно если честно)
  • Проблема с Microsoft.Extensions.Logging старше версии 6.0.0-preview6.*?

    @KislyFan Автор вопроса
    Я просто заглядываю в git, и там даже намека нет на подобный метод
    ни в ветке rc1 ни в rc2 https://github.com/dotnet/runtime/blob/d7619cd4b16...

    ни в 5.0
    https://github.com/dotnet/runtime/blob/390687f237a...
  • Проблема с Microsoft.Extensions.Logging старше версии 6.0.0-preview6.*?

    @KislyFan Автор вопроса
    Проект создал через студию, через nuget поставил туда пакеты. Ни одной дополнительной строчки
    cproj как-то так:
    <Project Sdk="Microsoft.NET.Sdk.Web">
    
    	<PropertyGroup>
    		<TargetFramework>net6.0</TargetFramework>
    		<UserSecretsId>6f1ded55-bde3-41f6-8ef0-5c172345de41</UserSecretsId>
    		<DockerDefaultTargetOS>Windows</DockerDefaultTargetOS>
    		<DockerfileContext>..\..</DockerfileContext>
    	</PropertyGroup>
    
    	<ItemGroup>
    		<PackageReference Include="Microsoft.AspNetCore.Mvc.Versioning.ApiExplorer" Version="5.0.0" />
    		<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.Logging.Configuration" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Microsoft.Extensions.Logging.Debug" Version="6.0.0-rc.1.21451.13" />
    		<PackageReference Include="Swashbuckle.AspNetCore.Swagger" Version="6.2.2" />
    		<PackageReference Include="Swashbuckle.AspNetCore.SwaggerGen" Version="6.2.2" />
    		<PackageReference Include="Swashbuckle.AspNetCore.SwaggerUI" Version="6.2.2" />
    	</ItemGroup>
    
    	<PropertyGroup>
    		<GenerateDocumentationFile>true</GenerateDocumentationFile>
    		<NoWarn>$(NoWarn);1591</NoWarn>
    	</PropertyGroup>
    
    	<ItemGroup>
    		<PackageReference Include="Microsoft.VisualStudio.Azure.Containers.Tools.Targets" Version="1.11.1" />
    	</ItemGroup>
    </Project>


    опытным путем оказалось что для падения достаточно только Microsoft.Extensions.Logging, откатываем его до 6.0.0-preview6.* и все работает. Но интересно было бы пощупать релиз кандидат
  • Как используют свойство ISession.IsAvailable?

    @KislyFan Автор вопроса
    Еще не приходилось использовать Redis и другие штуки, поэтому даже не задумывался в таком ключе. Спасибо!
  • Как пройти MSAL аутентификацию?

    @KislyFan Автор вопроса
    Регистрируй свое приложение

    Зачем мне регистрировать свое приложение? Для чего, я не понимаю. Мне свое приложение не нужно, мне надо воспользоваться чужим.
    В интернете есть сайт, я к нему не имею отношения кроме того что я пользователь сайта. Сайт переехал на azure, и со дня на день отключит старую авторизацию через отправку логина и пароля обычным POST запросом. Я пытаюсь авторизоваться через msal.net, и у меня это не получается. Результат в моем предыдущем комменте: метод AcquireTokenByUsernamePassword уходит в бесконечное ожидание и не выводит никаких ошибок в лог.
  • Как пройти MSAL аутентификацию?

    @KislyFan Автор вопроса
    profesor08, потому когда-то давно я написал программку, которая через httpClient взаимодействовала с сайтом. Никакого API, только httpGET, POST и парсинг html из ответов. И это здорово экономило время, человеку больше не надо было заходить на сайт, все данные собирались в БД.
    2HLLx.png
    А теперь чтобы подключиться все к тому же сайту нужно преодолеть авторизацию через login.microsoftonline.com, что сделать у меня пока не получается. Я достал из браузерных запросов Clientid, TenantId, но при запуске AcquireTokenByUsernamePassword -> ExecuteAsync то он уходит в бесконечное ожидание
    bCf9J.png
  • Как пройти MSAL аутентификацию?

    @KislyFan Автор вопроса
    Проблема в том, что все примеры которые там представлены рассчитаны на то, что вы будете эксплуатировать систему SSO со стороны бекэнда. Мне же надо сымитировать вход живого юзера используя предоставленный логин и пароль. Только предполагается что вместо юзера будет какой-то робот. Тоесть это прям клиент-клиент.
  • Как лучше оптимизировать следующий код?

    @KislyFan Автор вопроса
    calculator212, бинго, это старый парсер бинарных файлов. Стоит проблема с читаемостью и перформансом.. и стоит очень остро.
  • Nuget - The SSL connection could not be established?

    @KislyFan Автор вопроса
    Василий Банников,
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <packageSources>
        <add key="nuget.org" value="https://api.nuget.org/v3/index.json" protocolVersion="3" />
      </packageSources>
      <config>
        <add key="http_proxy" value="http://proxy:1111" />
        <add key="http_proxy.user" value="user" />
        <add key="http_proxy.password" value="AQAAANC==password" />
        <add key="https_proxy" value="https://proxy:1111" />
        <add key="https_proxy.user" value="user" />
        <add key="https_proxy.password" value="password" />
      </config>
    </configuration>


    заполнял через nuget.exe
  • Наследование дженериков, как сделать правильно?

    @KislyFan Автор вопроса
    Если язык это позволяет, то это нормально )
  • Наследование дженериков, как сделать правильно?

    @KislyFan Автор вопроса
    Дмитрий Афонченко, я эксперементировал, хотел посмотреть можно ли сделать что-то вроде явовского Wildcards <?>
  • Как маппить пакеты по opcode?

    @KislyFan Автор вопроса
    Meloman19, Вызов функции наличие которой задекларировано в сферическом IPacket, и которая реализовывается в каждом классе пакета
  • Тест скорости Marshal vs Manual Binary Serialization?

    @KislyFan Автор вопроса
    shai_hulud, вообще задача сводится к тому что для серверного приложения нужно написать 200+ классов-пакетов. К каждому пакету соответственно методы Create (ObjToByteArray) и Parse (ByteArrayToObj). Мне не хотелось их писать, я думал, что можно кастить с помощью Marshal.StructureToPtr и Marshal.PtrToStructure из пространства имен System.Runtime.InteropServices. Я тут провел небольшой тест. Он конечно очень дилетантский, но уже позволил сделать выводы:

    [Serializable]
        [StructLayout(LayoutKind.Sequential)]
        public class TestClass {
    
            [MarshalAs(UnmanagedType.I4)]
            public Int32 _int32;
    
            [MarshalAs(UnmanagedType.U4)]
            public UInt32 _uint32;
    
            [MarshalAs(UnmanagedType.I8)]
            public Int64 _int64;
    
            [MarshalAs(UnmanagedType.U8)]
            public UInt64 _uint64;


    public void func_testMarshal(Random rnd){
    
    
                for(int i=0; i<10000000; i++){
                    TestClass test = new TestClass(){
                        _int32 = rnd.Next(1, 65535),
                        _int64 = rnd.Next(1, 65535),
                        _uint32 = (uint)rnd.Next(1, 65535),
                        _uint64 = (ulong)rnd.Next(1, 65535)
                    };
    
                    byte[] b = MarshalUtils.StructureToByteArray(test);
    
                    // имитация бурной деятельности
                    b[0] = 1;
                }
            }


    Соответственно StructureToByteArray
    public static byte[] StructureToByteArray(object data){
    			var size = Marshal.SizeOf(data);
    			var bytes = new byte[size];
    			var ptr = Marshal.AllocHGlobal(size);
    			Marshal.StructureToPtr(data, ptr, false);
    			Marshal.Copy(ptr, bytes, 0, size);
    			Marshal.FreeHGlobal(ptr);
    			return bytes;
    		}


    Time : 3442ms

    А вот если рулить над этим всем руками.. банальным BitConverter.GetBytes и Buffer.BlockCopy
    for(int i=0; i<10000000; i++){
                    TestClass test = new TestClass(){
                        _int32 = rnd.Next(1, 65535),
                        _int64 = rnd.Next(1, 65535),
                        _uint32 = (uint)rnd.Next(1, 65535),
                        _uint64 = (ulong)rnd.Next(1, 65535)
                    };
    
                    byte[] b = test.Export1();
                    b[0] = 1;
                }


    public byte[] Export1(){
                byte[] b = new byte[192];
    
                byte[] b_int32 = BitConverter.GetBytes(_int32);
                byte[] b_int64 = BitConverter.GetBytes(_int64);
                byte[] b_uint32 = BitConverter.GetBytes(_uint32);
                byte[] b_uint64 = BitConverter.GetBytes(_uint64);
    
                Buffer.BlockCopy(b_int32, 0, b, 0, b_int32.Length);
                Buffer.BlockCopy(b_int64, 0, b, b_int32.Length, b_int32.Length);
                Buffer.BlockCopy(b_uint32, 0, b, b_int32.Length + b_int32.Length, b_uint32.Length);
                Buffer.BlockCopy(b_uint64, 0, b, b_int32.Length + b_int32.Length + b_uint32.Length, b_uint64.Length);
    
                return b;
            }


    Time : 2532ms

    Выигрыш в 25% как минимум, но не хочется заниматься обезьяньей работой и делать 400+ методов чтения/записи.
  • Как изменить файл внутри zip архива?

    @KislyFan Автор вопроса
    Александр, как ? Есть пример кода или ман где описывается сохраниение System.IO.Compression.ZipArchive ?