Вот
простые примеры того, что Mono является действительно хорошей средой для
разработчика
Serialization теперь полностью работает.
Ранее были различия в серриализации в Mono и .NET. Mono<->Mono работал но .NET<->Mono не работал. Все исправленно.
System.Windows.Forms большой финал.
Сегодняшней ночью очень важная веха в в поддержке Winforms. API полностью сделан, ntgthm yfi API точно такой же как .NET (все 12,776 методов).
Мы не говорим о потраченном вермени оглядываясь назад но первая проверка Winformas состоялась July 8th, 2004, на всю работу было потрачено 4 года.
За это время сделанно 6,434 commit в Winforms.
Спасибо всем кто помогал в этой работе! Спасибо всем тем кто делал contribute code! Спасибо всем кто делал contribute test! Спасибо всем кто делал contributed Bugzilla reports!
Что дальше ? Необходимо проверять на ошибки код написанный для кросплатформенного windowing/widget приложения. Если вы заметели баг в вашем приложении то необходимо по возможности предоставить отчет суда
Все изменения будут доступны в Mono 2.0 Release.
285
System.Data.DataSet::.ctor(System.Runtime.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext,
System.Boolean)
81
System.Data.SqlClient.SqlConnection::set_ConnectionString(System.String)
42
System.Data.SqlClient.SqlConnection::get_ConnectionString()
11
System.Data.OracleClient.OracleParameter::set_Value(System.Object)
7
System.Data.OracleClient.OracleParameter::get_Value()
6
System.Data.OleDb.OleDbDataReader::GetFieldType(System.Int32)
5
System.Data.Common.DbDataAdapter::set_UpdateBatchSize(System.Int32)
5
System.Data.OracleClient.OracleDataReader::GetSchemaTable()
4
System.Data.OracleClient.OracleDataReader::NextResult()
2
System.Web.Handlers.TraceHandler::ShowDetails(System.Data.DataSet)
2
System.Data.OracleClient.OracleCommand::ExecuteOracleScalar()
2
System.Data.Common.DbDataAdapter::get_UpdateBatchSize()
1
System.Data.OracleClient.OracleConnection::get_DataSource()
1
System.Data.OracleClient.OracleCommand::Clone()
1
System.Data.OracleClient.OracleDataReader::GetOracleBinary(System.Int32)
1
System.
Data.
OleDb.
OleDbConnection::
GetSchema(System.
String)
Несколько неделю ушло не реализацию данного API некоторые части
MSDN
описывающие API не имеют пояснений и примеров использования. Типичный пример
System.Data.DataSet::.ctor(System.Runtime.Serialization.SerializationInfo,
System.Runtime.Serialization.StreamingContext,System.Boolean).
как вы видите
285
требований созданны для этого API.
Требуется помощь : примеры использования
.NET
кода помогут в создании API. Пожалуйста присылайте дефекты в
bugzilla.novell.com
с добавлением примеров кода или коментариями с линком на на ваш пример
использования. Или отправляйте примеры на
vvaradhan
AT
novell
DOT com. Пожалуйста не присылайте код который не соответствует
MIT/X11шлицензии
однако публичный код преветствуется
(public
domain code is
accepted).
Большое спасибо и продвижения.
Версия вашей
сборки
Как посмотреть версию сборки? Все очень просто для Linux -
используем дизасемблер и grep :
user# monodis --assembly Hello.exe | grep Version
Mono .NET 2.0 Compiller
Как скомпилировать файл под Mono .NET 2.0. Используйте компилятор gmcs :
user# gmcs MyClass.cs
Gtk
Регестрация свойств GObject.
Original.
Поддержка свйоств GObject появилась в управляющих классах. Эти свойства необходимы специально для людей использующих Custom CellRenderers.В текущем патче есть метод CellDataFunc который необходимо использовать для custom cell render в место того чтобы использовать SetAttributes механизм уязвимый для Gtk. Простой пример сипользования от автора :
// PropertyRegistration.cs - GObject property registration sample
//
// Author: Mike Kestner
//
// Copyright (c) 2008 Novell, Inc.
namespace GtkSamples {
using System;
public class TestObject : GLib.Object {
public static int Main (string[] args)
{
GLib.GType.Init ();
TestObject obj = new TestObject ();
GLib.Value val = new GLib.Value (42);
obj.SetProperty ("my_prop", val);
val.Dispose ();
if (obj.MyProp != 42) {
Console.Error.WriteLine ("Property setter did not run.");
return 1;
}
GLib.Value val2 = obj.GetProperty ("my_prop");
if ((int)val2.Val != 42) {
Console.Error.WriteLine ("Property set/get roundtrip failed.");
return 1;
}
Console.WriteLine ("Round trip succeeded.");
return 0;
}
int my_prop;
[GLib.Property ("my_prop")]
public int MyProp {
get { return my_prop; }
set {
my_prop = value;
Console.WriteLine ("Property setter invoked.");
}
}
}
}
Как корректно
получить цвет из Gtk.ColorButton
Цвет хранится в трех значениях RGB канала. Но только в верхнем
регестре возвращаемого значения типа byte
Вот пример который обычно вызывает положительные эмоции у
пользователей - автодополнение при наборе текста :
[Glade.Widget()]
private Gtk.ColorButton cbtnColor;
public byte ColorRed
{
get
{
//Console.WriteLine("Red {0}", cbtnColor.Color.Red);
//Console.WriteLine("Red {0}", (cbtnColor.Color.Red / 256 ) );
fColorRed = Convert.ToByte(cbtnColor.Color.Red / 256);
return fColorRed;
}
set
{
fColorRed = value;
}
}
Автодополнение
текста
// created on 03.01.2006 at 1:28
using Gtk;
public class Gui : Window
{
public Gui() : base("Combo")
{
Entry en = new Entry();
this.Add(en);
en.Completion = new EntryCompletion();
ListStore l = new ListStore(typeof(string));
l.AppendValues("Helo");
l.AppendValues("Fuck");
l.AppendValues("Combobox");
en.Completion.Model =l;
en.Completion.TextColumn = 0;
ShowAll();
}
}
Рисовать на любом
виджете очень просто
Для этого необходимо установить свойство :
Widget.AppPaintable = true;
Рисовать необходимо испольуя свойство GdkWindow
Цветовая схема реализованная в Gtksourceview 2.0 (GtkSourceView 2 in MonoDevelop)
Только что добавлена поддержка GtkSourceView 2 для MonoDevelop, и она может быть активирована с помошью конфигурационного свича :
monodevelop --enable-gtksourceview2
К сожалению Boo Binding и the Database Addin зависят на прямую от GtkSourceView# и не совместимы с API изменениями и версии 2.0. Это должно быть исправлено позже.
Хотя уже переведены на GtkSourceView2 сборки из MonoDevelop build repository
Главная причина почему это сделано - красивые схемы глубокого синего цвета "oblivion" :-)
GtkSourceView2# биндинг еще официально не реализован. И возможно будет поглощен сборкой Gnome# для биндинга платформы, но уже на сегодняшний момент все работает нормально.
Некоторые из новых возможностей :
- Улучшено выделение синтаксиса
- Поддержка цветовых схем
Список не созданных/удаленных возможностей :
- Печать
- Закладки (также используемые для точек останова если дебагер подключен)
Графического UI для изменения цветовой схемы на данный момент еще нет но это можно поправить изменя данные в в файле
~/.config/MonoDevelop/MonoDevelopProperties.xml
устанавливая следующие теги :
<Property key="GtkSourceViewStyleScheme" value="oblivion" />
<Property key="MonoDevelop.TextEditor.Document.Document.DefaultDocumentAggregatorProperties">.
20.11.2007
.NET Remouting
Пример .NET Remouting от michal_kohut@centrum.sk
Данный пример необходимо протестировать на вашем mono версии mono до 1.2.4 могут его не поддерживать :
////////////////////////////
THIS IS SERVER:
<<<>>>>
HttpServerChannel httpchannel = new HttpServerChannel(8085);
ChannelServices.RegisterChannel(httpchannel);
RemotingConfiguration.RegisterWellKnownServiceType(typeof(nsCRemoteObj.CRemoteObj),
"CRemoteObjURI",
WellKnownObjectMode.SingleCall
);
///////////////////////////
THIS IS CLIENT:
<<<>>>
ChannelServices.RegisterChannel( new HttpChannel() );
IRemoteObj obj = (IRemoteObj) Activator.GetObject(
typeof(IRemoteObj),
"http://localhost:8085/CRemoteObjURI"
);
//calling remote procedure
Node node = new Node("127.0.0.1",12345);
Node nout = obj.TestMethod(node);
Console.WriteLine("TestMethod completed. Returned ip: {0}", nout.ipAdd);
/////////////////////////////////
MY REMOTE CLASS:
<<>>
public class CRemoteObj : System.MarshalByRefObject, IRemoteObj
{
public CRemoteObj()
{
Console.WriteLine("CRemoteObj constructor invoked.");
}
~CRemoteObj()
{
Console.WriteLine("CRemoteObj destructor invoked.");
}
// definition of our method(s)
public Node TestMethod(Node node)
{
Console.WriteLine("CRemoteObj.TestMethod invoked.");
Console.WriteLine("Ip Address = {0}, Port = {1}", node.ipAdd, node.po);
Node nout = node;
nout.ipAdd = "manager";
return nout;
}
}
/////////////////////////
AND INTERFACE (includes my own object):
<<>>
// custom object which we want to pass
[Serializable]
public class Node
{
public string ipAdd;
public int po;
public Node()
{
}
public Node(string ipAddress, int port)
{
ipAdd = ipAddress;
po = port;
}
};
// interface which contains declaration of our method(s)
public interface IRemoteObj
{
Node TestMethod(Node node);
}
/////////////////////////////////////////////////
ASP.NET
Запуск ASP.NET веб приложения из любого другого приложения
Данный пример позволяет запустить отдельный XSP ASP.NET сервер с необходимым вам веб сайтом.
XSPWebSource source = new XSPWebSource(System.NET.IPAddress.Any,8080);
server = new ApplicationServer(source);
server.AddApplicationsFromCommandLine("/:/path/to/asp.net/application");
server.Start(true);
SMTP
Пример использования SMTP сервера от gianluca.simoni@cstnet.it
Письма отсылаются с помошью postfix :
SmtpClient smtp = new SmtpClient("mail.example.com");
smtp.Credentials = null;
smtp.Send(msg);
Localization
Локализация для monodevelop
Для того чтобы установить правильную локализацию monodevelop необходимо установить переменную bash
LANG=en_GB monodevelop
Monodoc
Добавление документации в базу данных monodoc
Для того чтобы добавить измененные данные в базу данных monodoc необходимо использовать комбинацию клавиш :
Ctrl-U
При этом данные вносятся в глобальную базу данных