• Как структурируют международные веб-проекты?

    inoise
    @inoise
    Solution Architect, AWS Certified, Serverless
    Я бы использовал полирепозитории. То есть вы делаете несколько независимых репозиториев, единых для обоих проектов и ставите их в зависимость. То что вы описали на самом деле является двумя разными проектами, просто платформа одна
    Ответ написан
    Комментировать
  • Как правильно освободить COM объект?

    AlexanderYudakov
    @AlexanderYudakov
    C#, 1С, Android, TypeScript
    Marshal.ReleaseComObject() нужно вызывать явно — в том же самом потоке (thread), где мы получили этот COM-объект.
    GC работает в другом потоке. Там вызывать нельзя. Поэтому деструктор придется убрать.

    Я использую конструкцию using — код остается читабельным.

    using (var conn = new Object1C(connectorInstance.Connect(ConnectionArgs.ToString())))
    {
        // Делаем необходимую работу
    }


    P.S. Не забывайте также освобождать любые 1С-объекты, полученные вами через это COM-соединение. Методика та же.
    Ответ написан
    1 комментарий
  • Binding StringFormat (WPF) не срабатывает?

    lam0x86
    @lam0x86
    <Label
      Content="{Binding ElementName=slider1, Path=Value}"
      ContentStringFormat="{}Выбрано {0} единиц"
      DockPanel.Dock="Top"
    />
    Ответ написан
    1 комментарий
  • Как нынче тестят Console?

    impwx
    @impwx
    Разработчик
    Это как раз та проблема, ради решения которой придумали Dependency Injection. Если вы жестко завязываетесь на статический класс Console, приходится мириться с его ограничениями, в частности - однопоточностью.

    Самое грамотное решение, за которое будет не стыдно - действительно, использовать DI и интерфейс. Придется реализовать два класса на его основе - "боевой" ConsoleWrapper и тестовый ConsoleWrapperMock.

    В качестве быстрого и грязного решения - если программа несложная и вы можете протестировать всё через входные параметры, можно в тесте запускать ее как внешний процесс (вызывать exe-шник) - тогда процессы будут независимы друг от друга и тесты можно будет гонять параллельно.
    Ответ написан
    2 комментария
  • Как генерировать Json на C#, если структура динамическая, не прописывая все возможные варианты?

    @Sing303
    А dynamic не устраивает?

    dynamic filesListCommand = new
    {
        Command = "FilesList",
        Data = new { Files = new[] { "file1", "file2", "file3", "file4" } }
    };
    
    dynamic userInfoCommand = new
    {
        Command = "UserInfo",
        Data = new { UserId = 1, UserName = "Roman" }
    };
    
    string filesListCommandJson = JsonConvert.SerializeObject(filesListCommand);
    string userInfoCommandJson = JsonConvert.SerializeObject(userInfoCommand);
    
    dynamic filesListCommandParsed = JObject.Parse(filesListCommandJson);
    dynamic userInfoCommandJsonParsed = JObject.Parse(userInfoCommandJson);
    
    string file1Value = filesListCommandParsed.Data.Files[0]; // file1
    string romanValue = userInfoCommandJsonParsed.Data.UserName; // Roman
    Ответ написан
    Комментировать
  • Бесплатный проект для портфолио превратился в бесконечный. Как быть?

    Спланируйте релизы. Сейчас вы работаете только над v.1.0 для которого у вас есть ТЗ и все те доработки, на которые вы по доброте душевной согласились.

    Принимать новые feature request'ы от клиента можно, но даже не думайте их реализовывать, пусть, для этого всего одну строку поправить – все они пойдут уже в будущие, платные релизы. Принимайте хотелки клиента, аккуратно записывайте, и забывайте про них до поры до времени.

    Держите клиента в курсе, у вас всё прозрачно: покажите клиенту ТЗ и планируемые к последующим релизам правки. Можете сразу раскидать планы на несколько будущих релизов – это пойдёт в v.1.1 через месяц после приёмки 1.0 и начала платного сотрудничества. А это – в v.2 – где-то летом.
    Ответ написан
    Комментировать
  • Почему закрывается "дочерний" процесс консольного приложения?

    @your_mirror Автор вопроса
    Решил таким образом. Game.exe и Update.exe закроются, но останется открыта консоль из Update.exe и будет независимым процессом.

    Melz, В Windows я делал обновление похожим образом, но там при закрытии Game.exe, Update.exe не являлся для него дочерним и существовал далее.

    Код Game.exe:
    static public void Run(Version version)
    		{
    			ProcessStartInfo psi = new ProcessStartInfo() {
    				WorkingDirectory = Path.GetDirectoryName(AppDomain.CurrentDomain.BaseDirectory),
    				FileName = "/usr/bin/mono",
    				Arguments = String.Format("Update.exe -exe \"{0}\" -ud \"{1}\" -v \"{2}\"", Process.GetCurrentProcess().ProcessName, Config.ServerUrl, version)
    			};
    			Process.Start(psi).WaitForExit();
    
    			MainForm.Instance.Close();
    		}


    Код Update.exe:
    public static int Main(string[] args)
    		{
    			ParseArguments(args);
    			String tmpFile = Path.GetTempFileName();
    			File.Copy("update.sh", tmpFile, true);
    			Process.Start("xterm", String.Format("-e sudo bash {0} {1} {2} {3}", tmpFile, AppName, UpdateDomain, VersionToInstall));
    
    			return 1;
    		}
    Ответ написан
    2 комментария
  • Как создать простой шаблон в Visual Studio без Namespace?

    @dmitryKovalskiy
    программист средней руки
    Что вы понимаете под "Класс без namespace"? Технически это невозможно. Да и зачем вам это я понять не могу.
    Ответ написан
    Комментировать
  • Должен ли .dll показывать версию, имя и тд в свойствах файла?

    xakpc
    @xakpc
    full-stack .net developer, CEO Leecero.com
    Неважно что там в свойствах файла, это бесполезно.
    Важно то, что без AssemblyInfo другие .net сборки не будут знать версию этой сборки, она будет 0.0.0
    Это может создать проблему в будущем, при контроле версий, или когда у вас будет несколько версий сборки в продакшене. Если таких проблем не предвидеться, можно игнорировать AssemblyInfo. Но я бы порекомендовал вернуть и заполнить его.
    Ответ написан
    Комментировать
  • Как вы относитесь к возможности сортировки вопросов Тостера по степени их сложности?

    @olololosh
    что значит "много тупых вопросов"? Вы все такие умные? Если человек что-то спрашивает, то значит, что по каким-то причинам он не может самостоятельно ответить на этот вопрос в данный момент. Я тоже уже задал огромное количество "тупых вопросов", где в ответах было много шлака. Но один пользователь мне всегда помогал. Достаточно было всего одного его комментария, что бы я отметил вопрос как решенный. Я, к примеру, задаю "тупой вопрос", и параллельно гуглю. И это может для 40-ка летнего лысого программиста задрота со стажем 15 лет этот вопрос "тупой", но для меня он важный, иначе зачем его задавать? Просто не смотри "тупые вопросы", если ты такой "умный".Не надо ничего решать с "тупыми вопросами", а если что просто ответь на него и на 1 тупой вопрос будет меньше...
    Ответ написан
    5 комментариев
  • Как вы относитесь к возможности сортировки вопросов Тостера по степени их сложности?

    @FoxInSox
    Все уже изобретено на stackoverflow. Рейтинги и прочие ограничители не вводятся по одной причине: 90% людей было бы просто забанено сообществом сразу же. На stackoverflow оставшиеся 10% это внушительная часть людей, на Тостере же это 20 человек.
    Ответ написан
    Комментировать
  • Как синхронизировать / сделать репликацию файловой бд?

    arxont
    @arxont
    C# программист
    А если поставить dropbox (или аналоги) на все компьютеры и положить туда файл базы? Пусть он занимается синхронизацией :)

    Как вариант есть родная реализация API OneDrive
    Ответ написан
    Комментировать
  • Как получить данные из стандартных команд cmd.exe в своем приложении на C#, не вызывая подпрограммы?

    @mayorovp
    У вас путаница в мыслях... Во-первых, "подпрограмма" - это в C# синоним метода. Если вы используете winforms - то вы уже используете кучу подпрограмм :) А то, чего вы хотите избежать, называется "внешняя программа" или "дочерний процесс".

    Во-вторых, рефлексия возможна только в отношении программ на платформе .NET - а перечисленные вами программы являются нативными. Разумеется, рефлексия в их отношении невозможна. По той же причине бесполезно из декомпилировать - все равно вам надо будет писать то же самое на другом языке.

    В-третьих, ping, tracert и netsh не являются командами cmd.exe. Команды cmd.exe - это echo, if, call, set, goto, for и т.д., а то, что вы перечислили - это системные утилиты.

    Теперь по вопросу.

    ping. Имеется вот этот класс: msdn.microsoft.com/en-us/library/system.net.networ... Ни разу с ним не работал, но выглядит удобным.

    tracert. Используйте тот же класс, указав Ttl в PingOptions.

    netsh. Тут все сложнее. Дело в том, что эта программа - обертка для кучи разных настроек, находящихся в совершенно разных местах. Если вам нужно получать данные - то попробуйте поискать их в msdn.microsoft.com/en-us/library/system.net.networ... Если их там нет - гуглите. Главное - гуглите без ключевого слова netsh.

    etc. А вот тут все не просто сложно, а невозможно. Невозможно взять неизвестную заранее утилиту, и сделать то же самое, что она делает, не запуская ее при этом. Поэтому вам надо определиться - либо ваша программа умеет выполнять фиксированный список действий - либо ей можно передать любую команду, но она будет запускать дочерние процессы. Возможен и промежуточный вариант - есть действия, которые программа может выполнять сама, а для выполнения других будут запускаться дочерние процессы.
    Ответ написан
    Комментировать
  • Существует ли готовое решение, позволяющие считывать QR-код на сайте веб-камерой?

    polevsl
    @polevsl
    Здравствуйте!
    Существует. Пожалуйста: zbar.sourceforge.net/
    Работает. Опенсорс.
    Ответ написан
    Комментировать