GTK# 开发环境

前言

本章节主要描述 GTK# 的开发搭建和相关注意事项

下载

http://www.monodevelop.com/download/

  • 第一步,下载并安装 Mono + GTK#
    安装完成以后,进入 Mono Basics 进行验证。
  • 第二步,下载并安装 Xamarin Studio 集成开发环境

使用 Xamarin Studio 开发 GTK# 桌面环境

创建工程

选择 .NET -> Gtk# 2.0 Project

输入项目相关信息,注意,Location 我选择的是 /Users/mac/workspace/mono/hello

生成项目一览,如图可以设置断点,点击左上角执行按钮便可以进行 debug

工程目录文件

工程生成以后,会在 Location /Users/mac/workspace/mono/hello 目录中生成项目 hello;

类似于 Eclipse 的 workspace 和 project 的关系,这里的 Location 就等价于 Eclipse 的 workspace,但是也有不同,看如下描述;

hello.sln

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 2012
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "hello", "hello\hello.csproj", "{4DC27BAF-7822-44EC-9153-CDAFBD8D4C4A}"
EndProject
Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x86 = Debug|x86
Release|x86 = Release|x86
EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution
{4DC27BAF-7822-44EC-9153-CDAFBD8D4C4A}.Debug|x86.ActiveCfg = Debug|x86
{4DC27BAF-7822-44EC-9153-CDAFBD8D4C4A}.Debug|x86.Build.0 = Debug|x86
{4DC27BAF-7822-44EC-9153-CDAFBD8D4C4A}.Release|x86.ActiveCfg = Release|x86
{4DC27BAF-7822-44EC-9153-CDAFBD8D4C4A}.Release|x86.Build.0 = Release|x86
EndGlobalSection
EndGlobal

可以清晰的看到 Location 中的 hello.sln 是对单个 project 的描述,也就是说,Location 只是对一个 Project 的描述,言外之意,就是一个 Location 下只能有一个 Project,而 Eclipse 的 workspace 可以对应多个 Project… 这里是两者之间非常不同的地方。

添加工程 Solution

添加 C# 文件

一个工程只能有一个 Main Class

一个 GTK# 工程只能有一个 C# Main Class,否则在构建的时候会出错。

常用快捷键

  1. 快速修复错误, Alt + Enter

  2. 快速格式化, Ctrl + I

可视化编辑

GTK# 提供了两种可视化编辑器,一个是Glade另外一个是Setic,Glade 对 osx 支持不是很友好,另外,Setic目前已经集成到 Xamarin 中了。

选择 MainWindow.cs,选择 Designer,使用 Toolbox 进行设计。 Xamarin Setic 教程

错误异常处理

  1. Locale not supported by C library

    1
    2
    (hello:18065): Gtk-WARNING **: Locale not supported by C library.
    Using the fallback 'C' locale.

    Ubuntu 解决办法
    osx 解决办法

补充

C# Tutorial
Winforms vs Gtk#
How to install Gtk#
mono project get started

常用词汇

be ported to: 被移植到