New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Ошибка Внешнее исключение (System.ArgumentException): Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’} #33

Closed
artbear opened this Issue Apr 20, 2018 · 21 comments

Comments

Projects
None yet
5 participants
@artbear
Copy link
Owner

artbear commented Apr 20, 2018

Приезжает ошибка от разных пользователей

Например,

С какого-то времени, точно уже не помню, 
коммит через SourceTree выдает ошибку, если в репо установлен precommit1c:
ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла 
c:\testgit\MIS_TEMPLATES.epf в каталог c:\testgit\src, корень c:\testgit
ОШИБКА - {Модуль C:\OneScript\lib\1commands\src\Команда.os / 
Ошибка в строке: 310 / Внешнее исключение (System.ArgumentException): 
Item has already been added. Key in dictionary: ‘HOME’ Key being added: ‘home’}

Появилась в последнем релизе
виноват вызов ПеременныеСреды() при создании процесса.

Если КодировкаВывода = Неопределено Тогда
	Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, 
		ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды());
Иначе
	Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, 
		ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());		
КонецЕсли;    

Единственный способ обхода - вернуться к предыдущему релизу :(

/cc @dmpas @EvilBeaver исправьте в движке, реально отравляет жизнь.

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

Выложил релиз 1.3.3, в которой включена подробная диагностика вызовов C# - по совету @EvilBeaver

Попытка
		
	Если КодировкаВывода = Неопределено Тогда
		Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, 
ПерехватыватьПотоки, ПерехватыватьПотоки, , ПеременныеСреды());
	Иначе
		Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, 
ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());		
	КонецЕсли;

Исключение
	Инфо = ИнформацияОбОшибке();
	ВызватьИсключение Инфо.ПодробноеОписаниеОшибки();
КонецПопытки;

посмотрим, чего народ сообщит.

@dmpas

This comment has been minimized.

Copy link

dmpas commented Apr 20, 2018

@artbear а чего там в движке? кинь ссылку на досаду

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

Посидели с коллегой, у которого возникала проблема.
Поставили новый релиз и получили ошибки

git -c diff.mnemonicprefix=false -c core.quotepath=false commit -q -F C:\Users\Дубовкин\AppData\Local\Temp\33eeysib.x1j
Start hooks before commit for v8unpack erf and epf
ИНФОРМАЦИЯ - precommit1c v2.1.1
ИНФОРМАЦИЯ - Проверка необходимости выгрузки файла C:\projects\onec\features\step_definitions\Получение цен с сайта.epf в каталог C:\projects\onec\src, корень C:\projects\onec
ОШИБКА - {Модуль C:\Program Files (x86)\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 317 / ScriptEngine.Machine.ExternalSystemException: {Модуль C:\Program Files (x86)\OneScript\lib\1commands\src\Команда.os / Ошибка в строке: 312 / Внешнее исключение

(System.ArgumentException): Элемент уже добавлен. Ключ в словаре: "HOME"  Добавляемый ключ: 'home'}    
                        Процесс = СоздатьПроцесс(СтрокаЗапуска, РабочийКаталог, 
ПерехватыватьПотоки, ПерехватыватьПотоки, КодировкаВывода, ПеременныеСреды());           --->

System.ArgumentException: Элемент уже добавлен. Ключ в словаре: "HOME"  Добавляемый ключ: 'home'

   в System.Collections.Hashtable.Insert(Object key, Object nvalue, Boolean add)
   в System.Collections.Hashtable.Add(Object key, Object value)
   в System.Collections.Specialized.StringDictionaryWithComparer.Add(String key, String value)
   в System.Diagnostics.ProcessStartInfo.get_EnvironmentVariables()
   в ScriptEngine.HostedScript.Library.ProcessContext.Create(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
   в ScriptEngine.HostedScript.Library.SystemGlobalContext.CreateProcess(String cmdLine, String currentDir, Boolean redirectOutput, Boolean redirectInput, IValue encoding, MapImpl env)
   в ScriptEngine.Machine.Contexts.ContextMethodsMapper`1.<>c__DisplayClass25_0`7.<CreateFunction>b__0(TInstance inst, IValue[] args)
   в ScriptEngine.HostedScript.Library.SystemGlobalContext.CallAsFunction(Int32 methodNumber, IValue[] arguments, IValue& retValue)
   в ScriptEngine.Machine.MachineInstance.CallContext(IRuntimeContextInstance instance, Int32 index, MethodInfo& methInfo, IValue[] argValues, Boolean asFunc)
   в ScriptEngine.Machine.MachineInstance.MethodCallImpl(Int32 arg, Boolean asFunc)
   в ScriptEngine.Machine.MachineInstance.CallFunc(Int32 arg)
   в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
   --- Конец трассировки внутреннего стека исключений ---
   в ScriptEngine.Machine.MachineInstance.MainCommandLoop()
   в ScriptEngine.Machine.MachineInstance.ExecuteCode()}
@artbear

This comment has been minimized.

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

if (env != null)
            {
                foreach (var kv in env)
                {
                    sInfo.EnvironmentVariables[kv.Key.AsString()] = kv.Value.AsString();
                }
            }
@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

Все, у меня идеи закончились.
@dmpas @EvilBeaver ?

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

https://msdn.microsoft.com/ru-ru/library/system.collections.specialized.stringdictionary.add(v=vs.90).aspx

Исключение Условие
ArgumentException Запись с таким же ключом уже существует в StringDictionary.
@dmpas

This comment has been minimized.

Copy link

dmpas commented Apr 20, 2018

@artbear беда в том, что ПЕРЕД Add оно должно ж было ещё Contains вызвать, который вроде как должен был сказать, что есть уже такой ключ. Беда в платформе. Судя по гуглу, был такой косяк в .net 3.5, но в .net 4.0 как бы починили. И вот опять.

artbear added a commit to EvilBeaver/OneScript that referenced this issue Apr 20, 2018

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 20, 2018

Сделал исправление - ОДНА СТРОЧКА :)

EvilBeaver/OneScript#743

artbear added a commit to EvilBeaver/OneScript that referenced this issue Apr 20, 2018

artbear added a commit to EvilBeaver/OneScript that referenced this issue Apr 20, 2018

@artbear artbear added this to the 1.4 milestone Apr 21, 2018

@artbear artbear reopened this Apr 25, 2018

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 25, 2018

Пока не выпустили движок, ошибки продолжают сыпаться.

Придется сделать следующий костыль:

  • вставить попытку-исключение для старта процесса
  • в блоке исключения регуляркой проверить сообщение об ошибке -
    • \(System\.ArgumentException\):[^:]+:.*HOME[^:]+:.*home
  • если строка ошибки совпадает с регуляркой
  • тогда пишем Лог.Предупреждение
  • и вызываем старт процесса без передачи переменных среды

сегодня в метро на ноуте я это уже сделал :) но не успел проверить, т.к. доехал до нужной станции :)

еще можно добавить проверку на версию движка -
если версия движка <= 1.0.20, то проверка внутри исключения выполняется иначе не выполняется

@EvilBeaver

This comment has been minimized.

Copy link
Collaborator

EvilBeaver commented Apr 25, 2018

Т.е. на 19 это работало?

@nixel2007

This comment has been minimized.

Copy link
Collaborator

nixel2007 commented Apr 26, 2018

На 19 этого кода в 1коммандс не было.

@EvilBeaver

This comment has been minimized.

Copy link
Collaborator

EvilBeaver commented Apr 26, 2018

Ну я же пользовался прекоммитом на 20-ке, все работало.

@nixel2007

This comment has been minimized.

Copy link
Collaborator

nixel2007 commented Apr 26, 2018

@EvilBeaver у тебя мог быть старый 1коммандс. ииии этот баг проявляется не у всех. у меня, например, работает. суммарно было около десяти репортов за два месяца.

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 26, 2018

У меня больше репортов - за последнюю неделю только 5 человек из команд обучения Enterprise обратились, и аналогичные проблемы у их коллег, т.к. машины и ПО одинаковые.

@nixel2007

This comment has been minimized.

Copy link
Collaborator

nixel2007 commented Apr 26, 2018

т.к. машины и ПО одинаковые.

как бы все логично, нет? :)

@EvilBeaver

This comment has been minimized.

Copy link
Collaborator

EvilBeaver commented Apr 26, 2018

Ок, фикс-то выпущен в коммандс? В движок внесен

@nixel2007

This comment has been minimized.

Copy link
Collaborator

nixel2007 commented Apr 26, 2018

@EvilBeaver народ уверяет, что фикс движка не помогает.

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 26, 2018

Ок, фикс-то выпущен в коммандс? В движок внесен

Пока мной после общения с тобой в 1коммандс внесен фикс, который показывает расширенную инфу (стек движка), и все :)

У меня уже 2-й день не доходят руки закончить доработку #33 (comment)
у меня уже код был в метро написан, на тестирование времени не хватает :(

@artbear

This comment has been minimized.

Copy link
Owner Author

artbear commented Apr 26, 2018

Выполнено в #34

@artbear artbear closed this Apr 26, 2018

@artbear artbear self-assigned this Apr 26, 2018

@bpirate999

This comment has been minimized.

Copy link

bpirate999 commented Feb 11, 2019

Что обновить чтобы заработало?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment