Skip to content
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

Наноборда 3.3 вылетает сразу после запуска #11

Open
y0shir opened this issue Jul 20, 2020 · 4 comments

Comments

@y0shir
Copy link

y0shir commented Jul 20, 2020

Седьмая винда. Наноборда вылетает, оставляя следующее сообщение.

System.TypeInitializationException: Инициализатор типа "NServer.Configurator" выдал исключение. ---> System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
в NServer.Configurator..ctor()
в NServer.Configurator..cctor()

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

--- Конец трассировки внутреннего стека исключений ---
в nboard.Aggregator.CheckUpdatePlacesConfig()
System.TypeInitializationException: Инициализатор типа "NServer.Configurator" выдал исключение. ---> System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
в NServer.Configurator..ctor()
в NServer.Configurator..cctor()

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

--- Конец трассировки внутреннего стека исключений ---
в nboard.Aggregator.CheckUpdateProxyList()
System.TypeInitializationException: Инициализатор типа "NServer.Configurator" выдал исключение. ---> System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
в NServer.Configurator..ctor()
в NServer.Configurator..cctor()

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

--- Конец трассировки внутреннего стека исключений ---
в nboard.Aggregator.CheckUpdateIPServicesConfig()
Program.cs. catch. Exception1: System.IO.FileNotFoundException: Невозможно загрузить файл или сборку "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed" или один из зависимых от них компонентов. Не удается найти указанный файл.
Имя файла: "Newtonsoft.Json, Version=8.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed"
в NDB.PostDb..ctor(Boolean EnableAllowReput)
в NDB.MainClass.Main(String[] args)

Предупреждение: регистрация привязки сборок выключена.
Чтобы включить регистрацию ошибок привязки сборок, установите значение параметра реестра [HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) в 1.
Примечание. Регистрация ошибок привязки сборок может привести к некоторому снижению производительности.
Чтобы отключить эту функцию, удалите параметр реестра [HKLM\Software\Microsoft\Fusion!EnableLog].

@username1565
Copy link
Owner

username1565 commented Aug 16, 2020

Ого, я почти месяц даже не видел этого. Тут можно включить какие-то нотификации?

На будущее, тебе - совет. Когда открываешь вопрос, или пишешь кому-то на github'e,
обращайся к нему, по никнейму, через символ собачки @ - вот так: @y0shir .
Тогда, от github'a - письмо прилетает на емейл, и видно, что кто-то пишет.

Из логов, очевидно, что Aggregator.cs, пытается вызвать Configurator.cs,
и после этого - не пашут методы, вызываемые после using Newtonsoft.Json;,
в частности, на этапе попытки сохранить значения - в .json-конфиг.

Это он пытается, при первом запуске, загрузить списки Places, Proxy, и ExternalIPServices,
из .txt-файлов, в конфиг config-3.json, а потом переименовать эти файлы, и грузить эти данные из конфига.
Но, Configurator.cs не может сериализовать в JSON это вот, всё.

Я не знаю, откуда ты взял екзешник, пытался ли ты его скомпилировать, или взял готовый...
Закинь, короче, .dll-ку, NewtonSoft.dll, c методами NewtonSoft.JsonConvert, рядом с файлом nanodb.exe её положи.
Взять её, можешь здесь: https://github.com/username1565/nanoboard/tree/master/nanodb.exe-source/bin/Debug

Файл, полностью совпадает по версии с длл-кой из релизов, отсюда: https://github.com/JamesNK/Newtonsoft.Json/releases/tag/8.0.2
где и можно выколупать исходный его код.


Если глянуть свойства файла Newtonsoft.Json.dll
можно видеть описание: Json.NET .NET 3.5
и версию: 8.0.2.19309
далее, идём сюда: https://github.com/JamesNK/Newtonsoft.Json/releases/tag/8.0.2
и видим zip Json80r2.zip на 8 мегабайт.
В папке Net35, лежит тот самый Newtonsoft.Json.dll
который побитово совпадает с dll-кой из restore-архива.
>fc файл1 файл2

Контрольные суммы этого файла:


CRC-32: 609BA7A5
MD5: 214BC5A190E3E4F713180ADFDCF1C6E7
RIPEMD-160: 95C3C780046D8D74F3A6186DD03F9063097A8D0E
SHA-1: 643866401A51AB1634A0EC988BBC08E7D45269BF
SHA-256: 1B12F874835BE31CB6BDB457ADA43F2B8A1006B2FCB2B67A343763B99A5E161C
SHA-384: 68D0DA00B12A9F3FDF05ECC9FC5DAEB3AF1F0B7928D1A0AA894025A99645FD0E677214E66279B8E5855FE838E3CDC89D
SHA-512: F7D8D1FE6F06E8183369FD54DAEFA1F205F7A859B613CDE7518CCFD052FB57405228F2CF6EA93409054768C3FA96F9CD89EBB8D73E523E701AA80A4FFF330188_

Эту же CRC-32 можно видеть, если открыть nanoboard-restore.zip - WinRAR'ом.
И дату изменения - декабрь 2016-го, и дата релиза - январь 2016-го.
Так что Newtonsoft.Json.dll, более чем официальный, и чистый,
там даже исходник его прилагается, в архиве из релиза,
и несколько других либ для других фреймворков.
Но они какие-то прекомпиленные и не компилируются без пердолинга.


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

@y0shir
Copy link
Author

y0shir commented Aug 24, 2020

@username1565 Экзэшник я взял из релиза.

Repository owner deleted a comment from y0shir Aug 26, 2020
@username1565
Copy link
Owner

username1565 commented Aug 26, 2020

@yoshir,
Сори, нехотя - удалил твой коммент.

Хотел удалить свой, отредактированный, и снова добавить, одной копипастой, но с твоим юзернеймом.
А в итоге удалил твой. Фу быть мочёй. Если есть копи-паста, впостил бы её снова.
Но, в общем, понятно. Там три исключения при попытке обновления config-3.json.


Экзэшник я взял из релиза.

Так апдейт тот - надо просто поверх restore-архива накатить.
Там же неполный код, только изменения, и либ в апдейте нет.
Нафига мне каждый раз, в каждом релизе, по 200 мегов перезаливать,
если можно залить зипы по 2 мега, где только изменения?


System.NullReferenceException, говорит тебе, что где-то закрался null. А вот где, именно - я чёт понять не могу...
Исключения, они - читаются снизу.
Это:

System.NullReferenceException: В экземпляре объекта не задана ссылка на объект.
   в NServer.Configurator.GetValue(String key, String defaultValue)
   в nboard.Aggregator.CheckUpdatePlacesConfig()

означает, что: в namespace nboard, в классе Aggregator, вызывается метод (функция) CheckUpdatePlacesConfig(),
в которой вызывается из namespace NServer, из класса Configurator, метод (функция) GetValue, с параметрами,
и там где-то null, либо в параметрах, либо внутри GetValue().
Namespace'ы и class'ы, можно найти поиском ключевых слов - по исходникам.
И да, действительно, в Aggregator.cs, содержится метод CheckUpdatePlacesConfig(), который вызывает GetValue(key, defaultValue).
Суть этого метода в том, что прога пытается - либо достать значение по ключу key,
либо если же его не существует - установить defaultValue, в частности - defaultPlaces,
либо из захардкоженной строчки, либо из файла (если он есть).

И раз там, где-то, закрался null, то надо бы его показать...
Быть может он в параметрах? Тогда, надо показать параметры...
Строчка Console.WriteLine("paramValue: "+paramValue); в помощь, где paramValue - конкретный параметр.
Но тут уже без перекомпиляции не обойтись, если будешь менять исходник и тестить, чтобы показать эти параметры.

Я же там столько всего накодил, и да, может вылетать.
Всё это надо исправлять, и это всё - черновой вариант изменений, которые я тщательно описал в Changes.txt.
Ты можешь найти место, где добавлено это, где-то тут.
И коммит этой даты, и глянуть изменения в коде.

Его ещё, весь этот код, оптимизировать бы, знающим кодерам.
Лучший вариант, если чё не пашет - это откатиться назад,
где стабильно всё пашет, вплоть до официального restore-архива.
А ещё лучше - глянуть сам код (он же открыт), исправить что надо (погугли синтаксис с# что-ли, если не знаешь нифига),
ну и перекомпилировать исправленный код - в exe (файл для компиляции - он же прилагается, там).
Ну а дальше уже, сравнить изменения, между исправленной версией и текущей,
при помощи какого-нибудь WinMerge, и присунуть, каким-то образом, все эти строчки, куда-то сюда, для апдейта.

Ещё лучше - форкнуть код, скачать zip-архив с форка, исправить его, и залить исправленное поверх,
а потом открыть Pull Request. Тогда, будут видны - все изменения, построчно,
и я смогу проверить чё там наинжектено, и обновить код, если нет вирасав.
И ваще, можешь свой форк запилить, перебить ссылки всякие, и сам этим делом рулить, выпускать апдейты и информировать о них.

UPD:
По-моему, всё-таки, null, где-то в самом файле конфига.
Оно же пытается прочитать из конфига, "places", а там, походу - null (либо в файле, либо в полях json).
Попробуй просто переименовать конфиг, что-ли. Может он невалидно сгенерировался. Тогда, другой должен будет перегенерироваться.

И вообще, подскажи что именно ты делал... И как именно ты выхватил эту ошибку?
Чтобы её, можно было - воспроизвести.

А пока, если не хочешь помочь всё это протестить и зафиксить, а просто хочь потыкать - то можешь заюзать наноборду Karasiq'a

@username1565
Copy link
Owner

@y0shir, ну чё, пашет оно, или не?

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants