Имя: Пароль:
1C
1С v8
Ошибка конструктора Com "System.Text.UTF8Encoding"
0 franky_tut
 
19.12.22
08:47
Коллеги, прошу помочь. При вызове строки во внешней обработке
Текст = Новый COMОбъект("System.Text.UTF8Encoding");
система выдает ошибку "Ошибка при вызове конструктора (COMОбъект)"
Не понимаю, что необходимо сделать, чтобы заработало
1С 8.3.22
УТ 11.4
1 NorthWind
 
19.12.22
08:54
(0) судя по тому как написано - это ж .Net-овское что-то. Копайте в эту сторону.
2 NorthWind
 
19.12.22
08:55
https://avprog.ru/q/809889/ - тут вот пишут что .Net 3.5 нужен
3 Asmody
 
19.12.22
09:45
А зачем оно?!
4 franky_tut
 
19.12.22
16:00
(3) пытаюсь запустить подписание
Текст = Новый COMОбъект("System.Text.UTF8Encoding");
    Криптография = Новый COMОбъект("System.Security.Cryptography.HMACSHA256");
    Криптография.Key = Текст.GetBytes_4(СекретныйКлюч);
    Если base64 Тогда
        ТекстASCII = Новый COMОбъект("System.Text.ASCIIEncoding");
        ХешБайт = Криптография.ComputeHash_2(ТекстASCII.GetBytes_4(Строка)).Выгрузить();
    Иначе
        ХешБайт = Криптография.ComputeHash_2(Текст.GetBytes_4(Строка)).Выгрузить();
    КонецЕсли;
    Хеш = ConvToHexString(ХешБайт);
   Возврат Хеш;
5 franky_tut
 
19.12.22
16:01
У меня, почему-то и .Net3.5 вылетает при установке. при том что .net 7 установился
6 NorthWind
 
19.12.22
16:19
ну на другом компе попробуйте. Или на виртуалке. Если дело в этом - будете думать, как решить проблему с установкой на своей машине.
7 franky_tut
 
19.12.22
16:22
решил проблему установки .net3.5 по этой рекомендации. Проблема из заголовка ушла
https://lyapidov.ru/fix_net_framework_3-5_installation_error/
8 oleg_km
 
19.12.22
16:52
Все очень просто. В .NET Framework 4.8.1 и ниже этот класс был доступным COM:

[System.Serializable]
[System.Runtime.InteropServices.ComVisible(true)]
public class UTF8Encoding : System.Text.Encoding

А начиная с .NET Core и в том числе .NET 7 все классы, включая это престали быть доступными в COM:

public class UTF8Encoding : System.Text.Encoding
9 franky_tut
 
19.12.22
20:15
(8) как правильнее делать, чтобы не зависеть от .net3.5 ?
10 Сергиус
 
19.12.22
21:12
(4)Вроде как тоже самое можно средствами платформы сделать.
11 NorthWind
 
20.12.22
08:21
12 oleg_km
 
20.12.22
11:14
(9) Я подключаю .NET к 1С по методу Сергея Смирнова и могу использовать классы дотнет независимо от их видимости в COM. Можно сделать практически то же, но с помощью HTTP-сервера, тогда не будет использование COM и можно будет перейти на .NET 5,6,7 например.

В вашем случае нет зависимости от .net3.5. Главное чтобы какая-то .NET Framework была установлена, или 3.5 или 4.Х