LINUX.ORG.RU

Есть где-нибудь сводная таблица версий C# .Net или чего им нехватает

 , ,


0

1

А то уже неясно толком что с чем совместимо или несовместимо. Вот был когда-то просто .Net Framework и Mono, с отставанием, делавшие частичную реализацию API, а сейчас развелся зоопарк, тут еще и Core и спецификации Standard.

Таблицу по ссылке видел https://learn.microsoft.com/ru-ru/dotnet/standard/net-standard вот только столкнулся с тем, что либа, соответствующая стандарту 2.0 не хочет работать с Mono версии 6.8, при этом более ранние версии либы, спокойно работают. То ли ей нужна строго Mono 6.4 и не более, не менее, то ли вообще что-то не так пошло. Требует правильную сборку.

./zlist.cs(14,16): error CS0012: The type `System.Collections.IEnumerable' is defined in an assembly that is not referenced. Consider adding a reference to assembly `netstandard, Version=2.0.0.0, Culture=neutral, PublicKeyToken=cc7b13ffcd2ddd51'

Файл zlist.cs - для демонстрации работы с zip-архивами. Пример взят где-то с сайта документации по либе CSharpCode.SharpZipLib http://icsharpcode.github.io/SharpZipLib/

Исходники либы https://github.com/icsharpcode/SharpZipLib

Скомпилированный бинарник https://www.nuget.org/packages/SharpZipLib/

using System;
using System.Text;
using System.Collections;
using System.IO;

using ICSharpCode.SharpZipLib.Zip;

class MainClass
{
    static public void Main(string[] args)
    {
    
     //Между прочим, умеет читать самораспаковывающийся *.exe с zip внутри
        using (ZipFile zFile = new ZipFile(args[0])) {
            Console.WriteLine("Listing of : " + zFile.Name);
            Console.WriteLine("");
            Console.WriteLine("Raw Size    Size      Date     Time     Name");
            Console.WriteLine("--------  --------  --------  ------  ---------");
            foreach (ZipEntry e in zFile) {
                if ( e.IsFile ) {
                    DateTime d = e.DateTime;
                    Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
                        d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
                        e.Name);
                }
                else
                {
                 //e Is not File 
                 DateTime d = e.DateTime;
                    Console.WriteLine("{0, -10}{1, -10}{2}  {3}   {4}", e.Size, e.CompressedSize,
                        d.ToString("dd-MM-yy"), d.ToString("HH:mm"),
                        e.Name+"*");
                }//notFile
            }
        }
    }
}

Компилирую

$mcs ./zlist.cs -r:ICSharpCode.SharpZipLib.dll

Версии

$ mono -V
Mono JIT compiler version 6.8.0.105 (Debian 6.8.0.105+dfsg-3.2 Tue Jun 29 21:01:01 UTC 2021)
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com
	TLS:           __thread
	SIGSEGV:       altstack
	Notifications: epoll
	Architecture:  amd64
	Disabled:      none
	Misc:          softdebug 
	Interpreter:   yes
	LLVM:          supported, not enabled.
	Suspend:       hybrid
	GC:            sgen (concurrent by default)

Есть у меня подозрение, что эта версия 6.8 - версия компилятора, а не Mono и реально там что-нибудь соответствует .NET 4.5, но какая-то ерунда с доками, не могу понять.

При этом у меня завалялась старая сборка SharpZipLib трехлетней давности, которую сейчас не могу найти на сайте, так с ней проблем нет, всё компилируется и работает отлично. Чтобы самому собрать похоже нужна VS 16-я и более.

Ответ на: комментарий от ox55ff

Ты думаешь, что оно собрано под старый стандарт .net?

Для начала я вообще запутался в том, что под какой стандарт. В том числе, в информации по таблице от мелкомягких.

По ссылке написано под что собрано - под .Net 6.0 и .net standard 2.0 и 2.1 - разные версии dll. При этом на сайте MS как бы 2.0 должен работать в Mono 6.4 И вот что-то тут с пониманием цифр не то.

Моно сдохло. Используй .NET 5, который пришёл на смену кроссплатформенному dot net core.

Ха, я не успел ещё на core перейти, а оно уже сдохло. Вообще Mono какое-то симпатичное. Было по крайней мере.

anonymous_incognito ★★★★★
() автор топика
Последнее исправление: anonymous_incognito (всего исправлений: 1)
Ответ на: комментарий от solvent

Ага. Сработало. Кстати, спасибо.

Значит дебиановское моно - это .NET 4.5 (или около). И вот сабжевый вопрос возникает, где бы табличка была что оно какой версии и где.

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от solvent

Хорошая таблица, к ней ещё бы найти соответствие версий mono, а то mono -V и mcs --about ничего не сообщают такого.

Кстати, я чего-то думал, что WinForms не поддерживаются, а получается из таблицы, что можно пробовать кросплатформенное GUI на них сделать, за исключением языков с текстом справа налево.

anonymous_incognito ★★★★★
() автор топика

Но таки да, Mono нужно только если уже есть легаси код на .Net Framework и с ним нужно что-то сделать.

Для любого нового кода лучше взять .NET 6+

solvent
()
Ответ на: комментарий от ox55ff

Используй .NET 5, который пришёл на смену кроссплатформенному dot net core

И там есть полноценный официальный winforms? Но подозреваю WPF нету. Похоже, я тоже не откажусь от таблицы компонентов что есть чего нет для .net 5

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

И Windows.Forms и WPF в новых дотнетах есть, но только под винду, т.к. используют виндовые компоненты.

Есть кроссплатформенные альтернативы, вроде. А вообще линукс - не для десктопа.

lovesan ★★
()
Ответ на: комментарий от lovesan

Avalonia полностью для тех, кто не хочет переучиваться и поддерживает Winform формат написания UI.

ТС - LTS версия dotnet сейчас 6.0. На неё и смотри.

Linux для десктопа!

Oo
()

Спецификации StandardXX уже всё, новых не будет.

Что не хватает. Судя по исходникам SharpZipLib, новая версия библиотеки собирается с TargetFramework=netstandard2.0,net6.0, а старая (до 1.3.3) - net45. Далее, есть подозрение, что используется mono из репозитория дебиана, в котором отсутствует netstandard.dll. Ее можно найти в mono-reference-asseblies. Либо ставить mono из репозитория разработчиков.

Еще можно пересобрать SharpZipLib с нужным TargetFramework’ом, но это может быть тем еще квестом.

undef ★★
()
Ответ на: комментарий от undef

Меня смущает, что по таблице netstandard2.0 должен быть совместим с версией Mono 6.8, но что-то тут не так. То ли в дебиане кастрированная Mono, то ли вообще всё не правильно понял.

Пока что чисто из опыта получается, что Mono 6.8 в Debian неплохо совместимо со всем вплоть до .Net Framework 4.5, а вот выше - не факт.

anonymous_incognito ★★★★★
() автор топика
Ответ на: комментарий от anonymous_incognito

в дебиане кастрированная Mono

Ага. Нет reference-assemblies. Нужно качать их отдельно или ставить mono с mono-project.com.

Mono 6.8 в Debian неплохо совместимо со всем вплоть до .Net Framework 4.5, а вот выше - не факт.

До Framework 4.8 может.

undef ★★
()