Програмиране за .NET Framework http://www.nakov.com/dotnet-project/ MONO – свободна имплементация на .NET Framework Антон Андреев Факултет по Математика и Информатика на СУ "Св.

Download Report

Transcript Програмиране за .NET Framework http://www.nakov.com/dotnet-project/ MONO – свободна имплементация на .NET Framework Антон Андреев Факултет по Математика и Информатика на СУ "Св.

Програмиране за .NET Framework
http://www.nakov.com/dotnet-project/
MONO – свободна
имплементация на
.NET Framework
Антон Андреев
Факултет по Математика и Информатика
на СУ "Св. Климент Охридски"
За презентацията


Целта на настоящата презентация е
ви запознае с инициативата MONO
Необходими знания:



Елементарни познания по Линукс
Базови познания за езика C#
За настоящата изготвянето на
презентация е използван свободен
софтуер

OpenOffice.org
Съдържание


Значение на не Microsoft
имплементациите на .NET
Проектът Mono






Статус на проекта
Поддържани операционни системи
Инсталиране и конфигуриране на Mono
под Linux
Компилаторът на C#
Виртуалната машина
Графични интерфейси в Mono

Windows Forms
Съдържание (2)

Графични интерфейси в Mono






Документацията Monodoc
Среди за разработка



GTK#
Gnome#
Cococa# за MAC OS
Glade#
MonoDevelop
Eclipse
ADO.NET под Mono
Съдържание (3)


Java за под .NET CLR
ASP.NET под Mono






Модулът mod_mono
Сървърът XSP
Mono класове в Mono
Mono във ФМИ на СУ
Mono софтуер
Mono – полезни връзки
Не Microsoft имплементациите на
.NET





Изцяло с отворен код
Всеки може да участва в разработката
Лесно прехвърляне на друга хардуерна
платформа или операционна система
Мощта на .NET може да направи други ОС
като Linux и BSD по-привлекателни за
разработчиците (стига с тези с C / C++ :)
Намалява се монопола на Microsoft


Появява се конкуренция
В следствие се подобрява на качеството на
продуктите
Имплементации на .NET

Microsoft .NET Framework


Сайт: msdn.microsoft.com/netframework/
DotGNU Portable.NET






Сайт: http://www.dotgnu.org/
Виртуална машина, assembler, disassembler
Има компилатори за C и C#
Java и VB.NET – в процес на разработка
Работи се по цялостно ре-имплементиране
на Windows Forms
Възможно e GNU да прибавят към gcc и
компилатор за C#, който генерира native
код
Проектът Mono

www.go-mono.com

Зад проекта Mono стоят
Ximian и Novell

Лицензионни проблеми с
Microsoft
Статус на проекта Mono





Има версия 1.0 и тя ре-имплементира .NET
Framework 1.1
Поддържа се C# компилатор
VB.NET е в напреднал стадии, но все още е
нестабилен
Настоящата версия е 1.05 stable и 1.1.3
unstable
До средата на 2005 ще излезе Mono 1.2. Ще
включва следните новости:


Поддръжка на Generics
Обновен на C# компилатор
Статус на проекта Mono
Нова версия на основните библиотеки
 ASP.NET 2.0 подобрения
 Remoting подобрения от Whidbey
 System.XML подобрения
 Поддръжка за достъп до конзолата и
серийните портове
 Нови компилатори: VB.NET и JScript
поддръжка
 Имплементации на WSE1/WSE2
 System.Windows.Forms ще има по-солидна
поддръжка
Mono 2.0 е планирано за 2006
 Ще поддържа напълно .NET Framework 2.0


Поддържани ОС

Достъпни са компилирани пакети за:








RedHat Linux 9.0
SuSe Linux
Fedora Linux
Mac OS X
Microsoft Windows
За всички останали трябва да се
прекомпилира изходният код
Mono се включва и port системите на
повечето BSD-базирани ОС
Някои ОС ще включват Mono като част от
своите дистрибуции (напр. Gnoppix Linux)
Инсталиране и конфигуриране на
Mono под Linux


Вече има графичен инсталатор за
Linux
Mono се инсталира бързо и лесно
Инсталиране и конфигуриране на
Mono под Linux

Инсталацията под Windows е лесна:




Представлява обикновен Windows Setup
Включва GTK# и Web-сървър за ASP.NET
Може да работи и под cygwin (cygwin е
емулация на Linux за Windows)
 Под cygwin може да се прекомпилира
сорс-кодът на Mono
Под Fedora Linux може да се използва
yum repository


Използва се командата yum
Избягва се “Dependency hell”
Инсталиране и конфигуриране на
Mono под Linux

Има неофициални Debian Mono пакети



Сами решавате дали да предпочете тях или
прекомпилация
Компилацията би трябвало да протича без
проблем
Извършва по стандартния начин:
./configure && make && make install

Има и CVS, от който можете да
изтеглите текущата версия
Компилаторът на Mono за C#


Самият компилатор е писан на C# и може
да се самопрекомпилира
Поддържа стандарта ECMA #334 за C# 1.0


Работи се по компилатор за C# 2.0
Как се използва:
#mcs proba.cs proba.exe
#mcs –-help
#man mcs
Виртуалната машина на Mono



32-битов JIT (Just-In-Time compiler)
 Поддържа: Linux/x86, Linux/PPC,
Solaris/SPARC S390 и MacOS X
64-битов JIT
 Поддържа: Linux/x86-64,
Solaris/SPARCv9
 Има го само в Mono 1.1
Интерпретаторът mint работи на следните
платформи:
 Linux/86, Linux/PPC, S390, StrongARM,
SPARC, HPPA, SPARC v9
Виртуалната машина на Mono


--optimize – активира
оптимизациите
--aot




Ahead-of-time – предварително
компилиране (като ngen в MS .NET)
Цялата програма минава през JIT и
тогава се стартира
Има спор кое е по-бързо: managed
или native код
Има GAC кеш, Remoting и планове
за поддръжка на COM и XPCOM
Графични интерфейси (GUI)




Desktop приложенията не могат без тях
Windows Forms не се поддържа
напълно
Поддържат се други интерфейси
Целта им е:


Всяко графично приложение да
изглежда по съответният за всяка една
ОС начин
Това го няма в Java
AWT/Swing
Windows Forms под Mono




В началото се работеше по модела: wine
+ System.Drawing (wine изпълнява
Windows приложения под Linux)
В момента се работи по native
имплементация без wine
 100% поддръжка на Windows Forms се
очаква в края на 2005
Има забавяне в разработката поради
преминаването към втория модел
Трябва да се инсталират: libgdiplus и
графичната библиотека Cairo
GTK#

Под Linux има стандартна библиотека
(API) за изграждане на графичен
потребителски интерфейс – GTK

GTK може да се ползва от Mono


GTK# е C# обвивката на GTK

С GTK# можете да разработвате
графични приложения, ползващи GTK
GTK има имплементация и
за Windows (напр. GAIM за
Windows)
GNOME#

GNOME# са класове за работа с GNOME
API-то



По-удобни от GTK#
Не са портнати за Windows
Приложенията с графичен интерфейс,
писани за Mono, са трудно преносими



Често се налага търсене на библиотеки
Трудно е за обикновения
потребител
В бъдеще такива проблеми
ще намаляват
COCOA#

Библиотека с класове за native look
and fell под MacOS X
GLADE#



Библиотека за GUI за Mono
Разделя графичния интерфейс от
презентационната логика
Графичният интерфейс се описва в
отделен XML файл, а не в C# кода
GLADE – примерен XML файл
<?xml version="1.0" standalone="no"?> <!--*- mode: xml -*-->
<!DOCTYPE glade-interface SYSTEM
"http://glade.gnome.org/glade-2.0.dtd">
<glade-interface>
<widget class="GtkWindow" id="window1">
<property name="visible">True</property>
<property name="title" translatable="yes">win2</property>
<property name="type">GTK_WINDOW_TOPLEVEL</property>
...
<child>
<widget class="GtkButton" id="button1">
<property name="border_width">10</property>
<property name="visible">True</property>
<property name="label">button1</property>
...
</widget>
</child>
</widget>
</glade-interface>
GLADE





Примерът задава една форма, един бутон
и параметрите им
Подобен начин за създаване на графични
интерфейси се очаква и в Avalon на
Microsoft в следващата версия на Windows
– Longhorn
Позволява се динамично зареждане
Можем да променяме формите без
прекомпилация и програмистки умения
Различни платформи/програмни езици
могат да използват един и същ XML файл
за генериране на графичен интерфейс
Glade Interface Designer

Ползва се стандартният подход:



Лента с контроли
Форма със свойствата на контролата
Дизайнерът автоматично генерира
XML файл за създадената форма
Съответстващият C# код
using
using
using
using
System;
Gtk;
Glade;
GtkSharp;
public class GladeTest
{
[Glade.Widget] Button button1;
public GladeTest(string[] args)
{
Application.Init();
Glade.XML gxml = new Glade.XML(
"file.glade", "window2", null);
gxml.Autoconnect(this);
button1.BorderWidth = 10;
Application.Run();
}
(примерът продължава)
Съответстващият C# код
/* Connect the Signals defined in Glade */
public void OnWindowDeleteEvent(object o,
DeleteEventArgs args)
{
Application.Quit();
args.RetVal = true;
}
public void OnButton1Clicked(System.Object obj,
EventArgs e)
{
Console.WriteLine("Button 1 clicked");
}
public static void Main(string[] args)
{
new GladeTest(args);
}
}
Документацията Monodoc

Monodoc e браузър за
документацията на Mono и включва:






Описание на езика C#
Mono handbook – наръчник на Mono
разработчика
Документация за средите за разработка
GTK# и GNOME#
Самоучители
Прилича на браузърa
на MSDN Library
Средата MonoDevelop






Сайт: www.monodevelop.com
Monodevelop e средата за разработка, която
се пише от програмистите на Mono
Представлява порт на SharpDevelop (което
е среда за разработка за .NET под Windows)
Настоящата версия е 0.5.1
Включва следните възможности:
 Вградена документация и дебъгер
 Поддръжка на Java, NEMERALE (друг
език за .NET) и HTML
 Отваря Visual Studio .NET проекти
Все още има бъгове
Средата за разработка Eclipse





Eclipse e свободна среда за разработка (IDE)
Разработен е основно от IBM, с отворен код
Писан е на Java
Ползва се главно от Java разработчици
Eclipse може да използва plugins

Един plugin добавя някаква функционалност:
 поддръжка на даден програмен език
 поддържане на шаблони за проекти
 code autocomplete
 много други
Eclipse има plugin за C#
(малко стар)

ADO.NET под Mono

Mono поддържа следните ADO.NET Data
Providers:










DB – MySQL
DB – IBM DB2
DB – Firebird / Interbase
DB – MS SQL Server
DB – ODBC
DB – OLE DB
DB – Oracle
DB – Sybase
DB – SQL Lite
DB – PostgreSQL
Mono и ADO.NET – пример



Използваме MySql Data Provider "ByteFX"
Този provider го има и под Windows
(http://www.bytefx.com/)
Създаваме таблица с PHPMyAdmin на
сървъра debian.fmi.uni-sofia.bg:
CREATE TABLE employee(
firstname varchar(32),
lastname varchar(32));


Създаваме просто приложение за достъп
до таблицата
C# кода е показан на следващия слайд
(DatabaseDemo.cs)
Mono и ADO.NET – пример
using System;
using System.Data;
using ByteFX.Data.MySqlClient;
public class DatabaseDemo
{
const string CONNECTION_STRING =
"Server=debian.fmi.uni-sofia.bg;" +
"User ID=toncho;" +
"Password=T0n40;" +
"Database=toncho;";
public static void Main(string[] args)
{
IDbConnection dbCon =
new MySqlConnection(CONNECTION_STRING);
dbCon.Open();
using (dbCon)
{
(примерът продължава)
Mono и ADO.NET – пример
IDbCommand dbCmd = dbCon.CreateCommand();
dbCmd.CommandText = "SELECT * FROM employee";
IDataReader reader = dbCmd.ExecuteReader();
using (reader)
{
while(reader.Read())
{
string firstName =
(string) reader["firstname"];
string lastName =
(string) reader["lastname"];
Console.WriteLine("Name: {0} {1}",
firstName, lastName);
}
}
}
}
}
Java под .NET CLR




Сайт на проекта: www.ikvm.net
Има 2 основни цели:
 Java класове да могат да се изпълняват
под виртуалната машина на Mono
 Java класове/програми да бъдат
транслирани от Java byte код до .NET IL
Огромната база от код написан на Java ще
може да бъде преизползван под .NET
Пример:
 Eclipse (Java програма) работи под Mono
 ОС е Windows
 Mono работи под cygwin
ASP.NET под Mono



Има два начина за поддръжка на ASP.NET
 mod_mono – модул към Apache
 Apache използва модулна архитектура и
има модули за Perl и PHP например
 http://www.gotmono.net/documentation/mo
d-mono-howto.html
 XSP – Web сървър писан на C#
 Обслужва ASP.NET заявките
 Няма нужда от Apache
 Производителността на XSP вече е
добра
Поддържат се доста ASP.NET контроли, но
още има какво да се довършва
Прегледайте документация и форуми
Модулът mod_mono

След като се инсталира mod_nono в
httpd.conf се правят следните промени:
LoadModule mono_module modules/mod_mono.so
...
Alias /demo "/usr/share/doc/xsp/test"
MonoApplications
"/demo:/usr/share/doc/xsp/test"
...
<Directory /usr/share/doc/xsp/test>
SetHandler mono
<IfModule mod_dir.c> DirectoryIndex
index.aspx </IfModule>
</Directory>

Рестартира се Apache и за тест се ползва
следната страница: http://yourserver/demo/index.aspx
Допълнителни класове в Mono

Cairo





Commons.Xml
Commons.Xml.Relaxng
Commons.Xml.Relaxng.Rnc
Mono.Math


BigInteger
Mono.Math.Prime


Графична библиотека
Прости числа
Mono.Math.Prime.Generator

Генериране на прости числа
Допълнителни класове в Mono

Mono.Posix




Mono.Security
Mono.Security.Authenticode
Mono.Security.Cryptography



Системни извиквания
MD4 managed, MD5 unmanaged, RSA
managed, SHA1 unmanaged
Mono.Security.Protocol.Ntlm
Mono.Security.Protocol.Tls

Работа със SSL (Secure Socket Layer)
Допълнителни класове в Mono

Mono.Security.X509




Mono.Security.X509.Extensions
Mono.XML
Mono класовете прибавят понякога и
нови методи/свойства


Работа с цифрови сертификати
Разширяват стандартните класове на .NET
Mono е свободна имплементация!


Всеки може да пробва да прибави нещо
полезно (напр. в Mono.Math)
Ако бъде одобрено, ще се разпространява
с целия Mono Framework
Mono във ФМИ на СУ


На http://debian.fmi.uni-sofia.bg/manual/ има
интересни и образователни материали
Mono е инсталирано на Debian.FMI



Можете да се логнете и да пробвате
компилатора и виртуалната машина
Версията е доста стара (0.31 . . . при
условие, че има 1.0.4 stable)
Нова версия ще бъде инсталирана само
при проявен интерес
Порталът OpenFMI




Стартира проектът OpenFMI
Адрес: http://openfmi.net
Хостват се проекти с отворен код
Ако има желаещи там може да се
инсталира Mono
Mono, ASP.NET, debian.fmi –
пример
# mono /usr/local/bin/xsp.exe –root /dir1
--applications /dir2:/dir3



dir1 e виртуална директория в сървъра
dir2 e директорията, където се намират
вашите .aspx файлове
dir3 e съответстващата на виртуалната
директория физическа директория
# mono /usr/local/bin/xsp.exe --root
/usr/local/share/doc/xsp/test/ --applications
/:/usr/local/share/doc/xsp/test/
Mono, ASP.NET, debian.fmi
пример

В Mozzila/Firefox написваме:
http://debian:8080/index.aspx

Има разлика между малки големи букви и
трябва да сме във ФМИ за този пример

Извън факултета се използва тунелиране
през SSH
Mono софтуер

Приложни програми написани с Mono
Framework-a


Използва се графичен интерфейс GTK
(има GTK# за Windows)






www.gnomefiles.org
Често използват и други библиотеки, някои
от които не са пренесени към Windows
Като резултат много трудно биха тръгнали
под Mono за Windows
Galaxium – MSN комуникатор
MyBudget – счетоводен софтуер
WoodPusher – игра на шах
CDCollect – каталогизиране на дискове
Mono – полезни връзки





Mono – официален сайт: www.go-mono.org
Средата MonoDevelop:
www.monodevelop.com
Mono community: http://www.gotmono.net
Дискусии за .NET в OpenFMI:
http://explore.openfmi.net/computers/progra
mming/dotNET/


След регистрация пратете mail, за да
получите права
Zamples – пробвайте Mono online:
http://zamples.com/JspExplorer/samples/csh
arp.jsp
MONO – свободна
имплементация на
.NET Framework
Въпроси?