<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Mono on DoDoRo的梦想空间-码农,数学,算法,哲学,园艺</title>
    <link>https://dodoro.chouxiangpai.com/categories/mono/</link>
    <description>Recent content in Mono on DoDoRo的梦想空间-码农,数学,算法,哲学,园艺</description>
    <generator>Hugo</generator>
    <language>zh-cn</language>
    <lastBuildDate>Fri, 15 Nov 2013 00:00:00 +0000</lastBuildDate>
    <atom:link href="https://dodoro.chouxiangpai.com/categories/mono/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>快讯：Xamarin公司与微软达成全面合作，将捆绑vs2013</title>
      <link>https://dodoro.chouxiangpai.com/archives/516/</link>
      <pubDate>Fri, 15 Nov 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/516/</guid>
      <description>&lt;p&gt;早上收到Xamarin的邮件，他们在纽约时间2013年11月13日上午宣布Xamarin将加入到VS2013（而且肯定是内置），让开发者使用C#语言高效开发优雅的ios和android的应用，届时还将给MSDN的订阅者们提供相关专题内容，太棒了！&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/1.jpg&#34;&gt;&lt;img loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/516/images/1-300x158.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;这是mono老大Miguel de Icaza（米格尔·德伊卡萨）&lt;a href=&#34;http://t.cn/8Dkw4qt&#34; title=&#34;https://twitter.com/migueldeicaza&#34;&gt;&lt;/a&gt;&lt;a href=&#34;http://t.cn/8Dkw4qt&#34;&gt;http://t.cn/8Dkw4qt&lt;/a&gt; 在twitter上的留言，他认为今天对于C&lt;a href=&#34;http://huati.weibo.com/k/%E5%92%8CF?from=501&#34;&gt;#和F#&lt;/a&gt;是一个伟大的日子，估计Xamarin这两年过来的艰辛只有他们团队自己知道。&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/11.jpg&#34;&gt;&lt;img alt=&#34;1&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/516/images/11-300x165.jpg&#34;&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;最后，恭喜Xamarin，恭喜Mono老大，这将是写入C#发展史的一件大事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>《基于Mono for android移动开发》ppt讲座</title>
      <link>https://dodoro.chouxiangpai.com/archives/465/</link>
      <pubDate>Fri, 09 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/465/</guid>
      <description>&lt;p&gt;这是我们团队内部关于Mono for android讲座的ppt，写得一般，不过能点出一些开发过程中的要害。&lt;/p&gt;
&lt;p&gt;下载地址：&lt;a href=&#34;images/%E5%9F%BA%E4%BA%8EMono-for-android%E7%A7%BB%E5%8A%A8%E5%BC%80%E5%8F%91.pptx&#34;&gt;基于Mono for android移动开发&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;a href=&#34;images/QQ%E6%88%AA%E5%9B%BE20130809100552.png&#34;&gt;&lt;img alt=&#34;mono for android移动开发&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/465/images/QQ%E6%88%AA%E5%9B%BE20130809100552.png&#34;&gt;&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android获取网络状态</title>
      <link>https://dodoro.chouxiangpai.com/archives/450/</link>
      <pubDate>Thu, 08 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/450/</guid>
      <description>&lt;p&gt;app应用的一个重要功能就是连接到互联网，而连接互联网可以有很多中方式，2G、3G、wifi等方法，有时候是没有网络的，所以在开发应用的时候，需要判断网络状态。&lt;/p&gt;
&lt;p&gt;mono for android提供了比较简便的方法来获取网络状态，代码如下：&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// 获取网络状态&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;/summary&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;returns&amp;gt;&amp;lt;c&amp;gt;true&amp;lt;/c&amp;gt;, if net work was checked, &amp;lt;c&amp;gt;false&amp;lt;/c&amp;gt; otherwise.&amp;lt;/returns&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;/// &amp;lt;param name=&amp;#34;context&amp;#34;&amp;gt;Context.&amp;lt;/param&amp;gt;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;bool&lt;/span&gt; CheckNetWork(Context context)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; connectivityManager = (ConnectivityManager)context.GetSystemService(Context.ConnectivityService);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(connectivityManager.ActiveNetworkInfo!=&lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;NetworkInfo.State netWorkState=connectivityManager.ActiveNetworkInfo.GetState();
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt;(netWorkState==NetworkInfo.State.Connected)
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;true&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;</description>
    </item>
    <item>
      <title>Mono for android中ListView控件使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/443/</link>
      <pubDate>Wed, 07 Aug 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/443/</guid>
      <description>&lt;p&gt;今天介绍Mono for android中ListView控件使用，并且支持在ListView中嵌入button，支持button触发单独事件，ListView自身的行触发单独时间。&lt;/p&gt;
&lt;p&gt;别小看了这个问题，MonoDroid(mono for android的前身)刚刚出来的时候，ListView里面是不能嵌入button的，即使能嵌入也不支持单独事件，还好新版本支持了。这里会涉及到一些技巧，我只是大致讲一下思路，后期会做成项目发到github上面去，大家下载下来就ok。&lt;/p&gt;
&lt;p&gt;我要实现的效果是，在ListView的每一行里添加button按钮，并且点击ListView的行进入该行详情，点击行上面的按钮，则进入其他相关操作，比如购买、订阅，如下图所示：&lt;/p&gt;
&lt;p&gt;&lt;img alt=&#34;ListView button&#34; loading=&#34;lazy&#34; src=&#34;https://dodoro.chouxiangpai.com/archives/443/images/QQ%E6%88%AA%E5%9B%BE20130807113307.png&#34;&gt;&lt;/p&gt;
&lt;p&gt;按照语法，分别创建AnimalListActivity和AnimalListAdapter，这里主要关注度在Adapter里面怎么给button添加click事件，特别是复用和不复用item的情况。&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view.FindViewById&amp;lt;Button&amp;gt; (Resource.Id.btn_Take).Click += &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt; {
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Intent intent = &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Intent (&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.context, &lt;span style=&#34;color:#66d9ef&#34;&gt;typeof&lt;/span&gt;(BuyActivity));
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;context.StartActivity (intent);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;};
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;1、如果不复用item，可以实现上面的效果，但是如果加载的数据流超过50左右直接会导致卡死；所以必须得复用；&lt;/p&gt;
&lt;p&gt;2、如果复用item，需要注意如何给button添加复用事件。我已经想到解决办法了：只能在item的view被创建的第一次的时候给item加click事件，否则会支持n+1次&lt;/p&gt;
&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;&#34;&gt;&lt;code class=&#34;language-csharp&#34; data-lang=&#34;csharp&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (convertView == &lt;span style=&#34;color:#66d9ef&#34;&gt;null&lt;/span&gt; || !(convertView &lt;span style=&#34;color:#66d9ef&#34;&gt;is&lt;/span&gt; TableLayout))
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;view = context.LayoutInflater.Inflate(Resource.Layout.SubListItems, parent, &lt;span style=&#34;color:#66d9ef&#34;&gt;false&lt;/span&gt;);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//订阅按钮&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;var&lt;/span&gt; Iv_sub=view.FindViewById&amp;lt;ImageView&amp;gt;(Resource.Id.Iv_Sub);
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Iv_sub.Tag=position;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;Iv_sub.Click += &lt;span style=&#34;color:#66d9ef&#34;&gt;delegate&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;{
&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; pos=Convert.ToInt32(Iv_sub.Tag);
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;这里还需要用到一个技巧Iv_sub.Tag=position;和int pos=Convert.ToInt32(Iv_sub.Tag);这两段代码是相呼应的。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用HorizontalPager</title>
      <link>https://dodoro.chouxiangpai.com/archives/438/</link>
      <pubDate>Sat, 15 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/438/</guid>
      <description>&lt;p&gt;智能手机上通过手势翻页的效果很普遍，这是大多数应用的必备功能，目前已经有很多jar包的类库实现了这个方法，不过这次我们不需要引用jar包，因为热心的程序员已经把java版的HorizontalPager翻译成了c#版的，可以直接在项目中使用。&lt;/p&gt;
&lt;p&gt;github上面有相关的代码，直接去下载就可以&lt;a href=&#34;https://github.com/Cheesebaron/MonoDroid.HorizontalPager&#34;&gt;https://github.com/Cheesebaron/MonoDroid.HorizontalPager&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;将这个类添加到自己的项目中，使用方法如下：&lt;/p&gt;
&lt;p&gt;var horiPager = new HorizontalPager (this); horiPager.ScreenChanged += new ScreenChangedEventHandler (horiPager_ScreenChanged);&lt;/p&gt;
&lt;p&gt;horiPager.AddView (BuildWebView (nextPageModel));&lt;/p&gt;
&lt;p&gt;其中，horiPager_ScreenChanged是翻页的过程中执行的委托方法，如果需要在翻页的过程中或者完成前后做操作，可以把相应的方法写在这里。&lt;/p&gt;
&lt;p&gt;**重要说明：**HorizontalPager因为支持手势左右滑动翻页，所以捕获不到单指点击事件，但是可以通过修改源代码，实现当点击中间的时候能捕获到点击事件（不过这样手势在中间滑动的时候会捕获不到）：&lt;/p&gt;
&lt;p&gt;找到方法public override bool OnTouchEvent(MotionEvent e)，修改case为Down的情况&lt;/p&gt;
&lt;p&gt;case MotionEventActions.Down: mLastMotionX = ev.GetX(); mLastMotionY = ev.GetY(); if(mLastMotionX&amp;gt;deviceWith*5/11&amp;amp;&amp;amp;mLastMotionX&amp;lt;deviceWith*6/11) { return true; }&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中实现下拉刷新PullToRefreshListView</title>
      <link>https://dodoro.chouxiangpai.com/archives/447/</link>
      <pubDate>Fri, 07 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/447/</guid>
      <description>&lt;p&gt;下拉刷新是现在微博非常流行的更新操作，android中有非常经典的类库PullToRefreshListView，不过开发者已经把java代码转成c#了，在github上面有相关的代码下载。&lt;/p&gt;
&lt;p&gt;使用比较简单，下面给出步骤：&lt;/p&gt;
&lt;p&gt;step1：将PullToRefreshListView类库引用到项目中，并且把相关的资源文件和xml界面文件也拷贝到项目中pull_to_refresh_header.axml；&lt;/p&gt;
&lt;p&gt;step2：定义相关的类&lt;/p&gt;
&lt;p&gt;#region 下拉刷新&lt;/p&gt;
&lt;p&gt;private class RefreshListener : PullToRefreshListView.OnRefreshListener&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private MainActivity mylActivity;&lt;/p&gt;
&lt;p&gt;List&amp;lt;WodubaoService.Model.hotnews&amp;gt; tempList;&lt;/p&gt;
&lt;p&gt;public RefreshListener (MainActivity activity)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mylActivity = activity;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public void onRefresh ()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;ThreadPool.QueueUserWorkItem (delegate {&lt;/p&gt;
&lt;p&gt;mylActivity.isNetWork = WebHelper.CheckNetWork (mylActivity);&lt;/p&gt;
&lt;p&gt;if (mylActivity.isNetWork) {&lt;/p&gt;
&lt;p&gt;tempList = mylActivity.appA.GetAppHots ();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;mylActivity.RunOnUiThread (delegate {&lt;/p&gt;
&lt;p&gt;bool isUpate=false;&lt;/p&gt;
&lt;p&gt;if (tempList != null &amp;amp;&amp;amp; tempList.Count &amp;gt; 0) {&lt;/p&gt;
&lt;p&gt;if(!tempList[0].articleId.Equals(mylActivity.htnList[0].articleId))&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;isUpate=true;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;mylActivity.htnList = tempList;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;if(mylActivity.isNetWork) {&lt;/p&gt;
&lt;p&gt;if(isUpate)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mylActivity.myList=new List&lt;!-- raw HTML omitted --&gt;();&lt;/p&gt;
&lt;p&gt;mylActivity.myList.Add(mylActivity.htnList);&lt;/p&gt;
&lt;p&gt;mylActivity.myList.Add(&amp;ldquo;nextpage&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;mylActivity.mainListAdapter.NotifyDataSetChanged();&lt;/p&gt;
&lt;p&gt;Toast.MakeText (mylActivity, &amp;ldquo;已更新最新资讯&amp;rdquo;, ToastLength.Short).Show ();&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中引入经典类库slidingmenu</title>
      <link>https://dodoro.chouxiangpai.com/archives/425/</link>
      <pubDate>Thu, 06 Jun 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/425/</guid>
      <description>&lt;p&gt;这两年，google风格的android菜单很流行，因为能节省大量的屏幕空间，而slidingmenu是国外一个开源的类库，能实现类似facebook和google plus这样的菜单功能，通过之前的介绍，我们已经能轻松在Mono for android中引入jar包。下面介绍如何引入slidingmenu，并且实现他。&lt;/p&gt;
&lt;p&gt;step1：从github上下载&lt;a href=&#34;https://github.com/jfeinstein10/SlidingMenu&#34;&gt;https://github.com/jfeinstein10/SlidingMenu&lt;/a&gt; ，并且在项目中引用，按照&lt;a href=&#34;http://dodoro.chouxiangpai.com/archives/379&#34;&gt;Mono for android中引用jar包&lt;/a&gt;的方法添加这个类库，编译一般都会成功；&lt;/p&gt;
&lt;p&gt;step2：在需要用到的Acitivity中引用 using Com.Slidingmenu.Lib.App;&lt;/p&gt;
&lt;p&gt;step3：调用相关函数&lt;/p&gt;
&lt;p&gt;View menu = inflatorservice.Inflate (Resource.Layout.LeftMenu, null); SetBehindContentView (menu);&lt;/p&gt;
&lt;p&gt;说明：如果打算调整menu的可以拉动的宽度，调用方法 SlidingMenu.SetBehindWidth (200);&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android实现UI多线程</title>
      <link>https://dodoro.chouxiangpai.com/archives/419/</link>
      <pubDate>Fri, 17 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/419/</guid>
      <description>&lt;p&gt;在实际开发过程中，我们需要使用多线程来保证UI不被卡住，mono for android提供了非常方便的方法来进行多线程开发，其中一种就是使用Thread，下面是一个例子：&lt;/p&gt;
&lt;p&gt;var progressDialog = ProgressDialog.Show(this, null, &amp;ldquo;加载中&amp;hellip;&amp;rdquo;, true); ;&lt;/p&gt;
&lt;p&gt;//启动页面&lt;/p&gt;
&lt;p&gt;new Thread(new ThreadStart(delegate&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;loginuser = userapi.Login(Et_phone.Text, Et_pwd.Text, true);&lt;/p&gt;
&lt;p&gt;this.RunOnUiThread(() =&amp;gt;&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;progressDialog.Hide();&lt;/p&gt;
&lt;p&gt;if (loginuser.uid != null &amp;amp;&amp;amp; loginuser.uid.Length != 0)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Finish();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;else&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Toast.MakeText(this, &amp;ldquo;登录失败，请输入正确的用户名或密码&amp;rdquo;, ToastLength.Short).Show();&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;});&lt;/p&gt;
&lt;p&gt;})).Start();&lt;/p&gt;
&lt;p&gt;这里其实是使用了C#的线程Thread来完成，不过有一个确定，就是不能终止当前的线程，比如如果这个线程执行慢，我先终止，暂时没有找到终止的办法&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中添加友盟sdk的第二种方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/379/</link>
      <pubDate>Wed, 15 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/379/</guid>
      <description>&lt;p&gt;&lt;a href=&#34;http://dodoro.chouxiangpai.com/archives/374&#34;&gt;前一篇文章&lt;/a&gt;介绍了如何在Mono for android中引用jar包的方法，这个方法比较麻烦，而且需要学习大量的桥接语言的命名规则，而且参数传递也很麻烦，今天我将介绍另外一种更加方便和简介的方法。通过今天的方法，我们可以添加任意的jar包，并且可以直接在c#项目中引用相应的类库，就如同我们引用一个c#类库一样，在这种方法中，一切的都是非常c#的。&lt;/p&gt;
&lt;p&gt;step1：mono for android的解决方案中，创建新的工程，选择Android下的“Android Java Bindings Library”;&lt;/p&gt;
&lt;p&gt;step2：在新创建的项目中有一个文件夹&amp;quot;Jars&amp;quot;，在这个文件夹中添加自己需要引用的jar包；&lt;/p&gt;
&lt;p&gt;step3：将新添加的Jar包的Build action设置为EmbeddedJar;&lt;/p&gt;
&lt;p&gt;step4：编译新增的工程，如果没有出问题，那么恭喜你可以调用这个jar包了，在这一步可能会出现错误，下一篇文章我会详细介绍。其实在这一步中mono完成了一项工作：将jar包的代码进行了转换，编程c#代码，非常强大。&lt;/p&gt;
&lt;p&gt;step5：在项目中引用上面编译好的工程，然后就可以直接引入名称空间，并且可以使用C#一样的语法对jar包里面的所有方法、属性进行调用。比如：&lt;/p&gt;
&lt;p&gt;Com.Umeng.Socialize.Controller.UMServiceFactory.ShareTo(this,meta,&amp;ldquo;分享自最大的数字报刊平台“我读报”）&amp;quot;,photo);&lt;/p&gt;
&lt;p&gt;网络上大量的开源jar包你都可以使用。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中添加友盟sdk的第一种方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/374/</link>
      <pubDate>Mon, 06 May 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/374/</guid>
      <description>&lt;p&gt;如何在Mono for android中添加友盟sdk，这个功能非常重要，他直接牵扯一个非常重要的问题：如何在mono for android的项目中引入jar包？考虑到android目前大量的应用都是基于java开发的，很多开源的类库和组件也是基于java开发的，所以如何在mono项目引入jar包非常关键，这是做mono for android应用开发的核心之一。我们在项目中已经成功地引入了jar包，几乎所有的包都可以引入和使用，这当然归功于xamarin公司的优秀产品。&lt;/p&gt;
&lt;p&gt;在这里，我先介绍第一种方法：直接在app项目引入jar包，通过桥接语言调用。其实在实际项目中这种方式用得很少，但我强烈建议每一个C#程序员都尝试一次，因为他会让你对编程语言有更深一层次的理解。我以umeng_sdk.jar为例，这个包主要是用于统计app运行、安装等情况的。&lt;/p&gt;
&lt;p&gt;step1：在项目添加现有文件，选择umeng_sdk.jar；&lt;/p&gt;
&lt;p&gt;step2：将umeng_sdk.jar的属性Build Action，设置为AndroidJavaLibrary；&lt;/p&gt;
&lt;p&gt;step3：创建一个类，如下所示&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;/// Java libary helper.&lt;/p&gt;
&lt;p&gt;/// java类库&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;public static class JavaLibaryHelper&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;#region umeng class&lt;/p&gt;
&lt;p&gt;private static IntPtr _umengHelperClass = JNIEnv.FindClass(&amp;ldquo;com/umeng/analytics/MobclickAgent&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;public static void UmengOnResume(Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, &amp;ldquo;onResume&amp;rdquo;, &amp;ldquo;(Landroid/content/Context;)V&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public static void UmengOnPause(Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;IntPtr methodId = JNIEnv.GetStaticMethodID(_umengHelperClass, &amp;ldquo;onPause&amp;rdquo;, &amp;ldquo;(Landroid/content/Context;)V&amp;rdquo;);&lt;/p&gt;
&lt;p&gt;JNIEnv.CallStaticVoidMethod(_umengHelperClass, methodId,new JValue(context));&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android绑定jar包报错解决办法</title>
      <link>https://dodoro.chouxiangpai.com/archives/428/</link>
      <pubDate>Sat, 20 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/428/</guid>
      <description>&lt;p&gt;前面讲过，通过EmbeddedJar方式可以绑定jar包，这个在实践中已经证明没有问题了，但是绑定的过程中，可能会出现一些小错误，我在绑定讯飞语点的jar包的时候，就报了如下的错误：&lt;/p&gt;
&lt;p&gt;Error message:&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechRecognizer.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechSynthesizer.cs(8,70,8,81): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.SpeechUnderstander.cs(8,71,8,82): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;obj\Debug\generated\src\Com.Iflytek.Speech.TextUnderstander.cs(8,69,8,80): error CS0234: 命名空间“Com.Iflytek.Speech”中不存在类型或命名空间名称“SpeechBaser”(是否缺少程序集引用?)&lt;/p&gt;
&lt;p&gt;IDE Version: xamarin.studio 4.0.3&lt;/p&gt;
&lt;p&gt;当时几乎觉得无望的时候，给xamarin公司发了邮件，过了两天，他们回复了解决办法。他们的邮件说：这是mono for android的一个bug。幸亏给了解决办法：&lt;/p&gt;
&lt;p&gt;在创建的类库（引用了jar包的类库）的Transforms文件夹下有个Metadata.xml，在这个文件里加入：&lt;/p&gt;
&lt;p&gt;&lt;!-- raw HTML omitted --&gt;public&lt;!-- raw HTML omitted --&gt; &lt;!-- raw HTML omitted --&gt;OnVolumeChangedEventArgs&lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;就可以解决问题了，我相信其他类似的jar包也可以通过这种方式解决。&lt;/p&gt;
&lt;p&gt;这也算是我为开源做的一次贡献，发现了一个bug，挺开心的！&lt;/p&gt;
&lt;p&gt;另外，估计xamarin公司会在下一个版本解决这个bug，坚信他们能解决。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用WebView，并显示加载百分比，返回按钮使用</title>
      <link>https://dodoro.chouxiangpai.com/archives/357/</link>
      <pubDate>Thu, 11 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/357/</guid>
      <description>&lt;p&gt;WebView是一个非常重要的控件，移动开发过程中会经常使用WebView来显示数据。WebView的使用非常简单，创建相应的对象，使用LoadData或者LoadUrl方法加载html数据，前者是价值html字符串，后者是加载一个可访问的URL地址。&lt;/p&gt;
&lt;p&gt;这是基本应用，WebView还有两个高级应用，一个是显示加载的百分比，另外一个是支持返回按钮。&lt;/p&gt;
&lt;p&gt;1、如何加载百分比&lt;/p&gt;
&lt;p&gt;这里需要对WebView的方法进行重写，如下所示：&lt;/p&gt;
&lt;p&gt;private class AwesomeWebClient : WebViewClient { }&lt;/p&gt;
&lt;p&gt;private class AwesomeWebChromeClient : WebChromeClient&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private Activity mParentActivity;&lt;/p&gt;
&lt;p&gt;private string mTitle;&lt;/p&gt;
&lt;p&gt;public AwesomeWebChromeClient(Activity parentActivity)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mParentActivity = parentActivity;&lt;/p&gt;
&lt;p&gt;mTitle = parentActivity.Title;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;public override void OnProgressChanged(WebView view, int newProgress)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;mParentActivity.Title = string.Format(&amp;ldquo;Loading {0}%&amp;rdquo;, newProgress);&lt;/p&gt;
&lt;p&gt;mParentActivity.SetProgress(newProgress * 100);&lt;/p&gt;
&lt;p&gt;if (newProgress == 100) mParentActivity.Title = mTitle;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;然后，调用相应的WebView方法：&lt;/p&gt;
&lt;p&gt;newsWebView = FindViewById&lt;!-- raw HTML omitted --&gt;(Resource.Id.newsWebView);&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.JavaScriptEnabled = true;&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.SetSupportZoom(true);&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.BuiltInZoomControls = true;&lt;/p&gt;
&lt;p&gt;newsWebView.Settings.LoadWithOverviewMode = true; //Load 100% zoomed out&lt;/p&gt;</description>
    </item>
    <item>
      <title>设置Mono for android启动页</title>
      <link>https://dodoro.chouxiangpai.com/archives/355/</link>
      <pubDate>Wed, 10 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/355/</guid>
      <description>&lt;p&gt;移动应用都有应用启动页，在mono for android里，设置应用启动页非常简单。&lt;/p&gt;
&lt;p&gt;1、在Style.xml里添加设置：&lt;/p&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;!-- raw HTML omitted --&gt;
&lt;p&gt;2、在需要的启动Activity里设置：&lt;/p&gt;
&lt;p&gt;[Activity(Label = &amp;ldquo;我读报&amp;rdquo;, MainLauncher = true, Theme = &amp;ldquo;@style/Theme.Splash&amp;rdquo;, ScreenOrientation = Android.Content.PM.ScreenOrientation.Portrait, NoHistory = true)]&lt;/p&gt;
&lt;p&gt;public class SplashActivity : Activity{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中js与c#代码的交互</title>
      <link>https://dodoro.chouxiangpai.com/archives/409/</link>
      <pubDate>Tue, 09 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/409/</guid>
      <description>&lt;p&gt;移动互联网的开发包中有大量的功能是设计到显示网页的，有些甚至是直接调取远程的网页，主要依赖于WebView这个控件，而实际的开发过程中，我们需要在js代码中调用c#里面的代码，或者在c#代码里直接调用相关的js方法，以完成更好的交互效果。&lt;/p&gt;
&lt;p&gt;android sdk提供了非常简便的办法来实现这一的功能，而Mono for android也提供了相关的方法，步骤如下：&lt;/p&gt;
&lt;p&gt;step1：首先要在创建一个类，这个类是用于与js代码交互的，如下所示&lt;/p&gt;
&lt;p&gt;public class Wodubao : Java.Lang.Object&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;Context context;&lt;/p&gt;
&lt;p&gt;public Wodubao (Context context)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;this.context = context;&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;dl&gt;
&lt;dt&gt;public Wodubao (IntPtr handle, JniHandleOwnership transfer)&lt;/dt&gt;
&lt;dd&gt;
&lt;p&gt;base (handle, transfer)&lt;/p&gt;
&lt;/dd&gt;
&lt;/dl&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;[Export (&amp;ldquo;Article&amp;rdquo;)]&lt;/p&gt;
&lt;p&gt;// to become consistent with Java/JS interop convention, the argument cannot be System.String.&lt;/p&gt;
&lt;p&gt;public void Article (Java.Lang.String articleid)&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;ArticleActivity currentArticle = (ArticleActivity)context;&lt;/p&gt;
&lt;p&gt;currentArticle.Finish ();&lt;/p&gt;
&lt;p&gt;Intent intent = new Intent (context, typeof(ArticleActivity));&lt;/p&gt;
&lt;p&gt;intent.PutExtra (&amp;ldquo;articleid&amp;rdquo;, articleid.ToString ());&lt;/p&gt;
&lt;p&gt;context.StartActivity (intent);&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;}&lt;/p&gt;
&lt;p&gt;说明：Wodubao是一个用于与js代码交互的类，在这个类里定义了一个方法Article ，这个就是js代码里的方法，方法需要一个参数 articleid，这个方法可以调用当前activity里的所有方法，以实现相应的效果。&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中MD5加密的方法</title>
      <link>https://dodoro.chouxiangpai.com/archives/414/</link>
      <pubDate>Tue, 02 Apr 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/414/</guid>
      <description>&lt;p&gt;其实和C#的代码是一样的，完全可以复用，这里给出相应的代码&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt; /// MD5 /// &lt;!-- raw HTML omitted --&gt; /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; /// &lt;!-- raw HTML omitted --&gt;&lt;!-- raw HTML omitted --&gt; public string MD5Hash(string strText) { MD5 MD5 = new MD5CryptoServiceProvider(); byte[] datSource = encoding.GetBytes(strText); byte[] newSource = MD5.ComputeHash(datSource); string byte2String = null; for (int i = 0; i &amp;lt; newSource.Length; i++) { string thisByte = newSource[i].ToString(&amp;ldquo;x&amp;rdquo;); if (thisByte.Length == 1) thisByte = &amp;ldquo;0&amp;rdquo; + thisByte; byte2String += thisByte; } return byte2String.ToUpper(); }&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono for android中使用sqlite</title>
      <link>https://dodoro.chouxiangpai.com/archives/359/</link>
      <pubDate>Thu, 28 Mar 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/359/</guid>
      <description>&lt;p&gt;小型数据库的使用在移动开发过程中非常方便，Mono for android提供了多种数据库访问方式，可以使用sqlite、使用WCF直接访问数据库，sqlite的访问非常简单，下面是一个使用monodroid（或者Mono for andorid访问数据库的方法）：&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;/// A helper class for working with SQLite&lt;/p&gt;
&lt;p&gt;/// &lt;!-- raw HTML omitted --&gt;&lt;/p&gt;
&lt;p&gt;public static class Database&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;private static string db_file = &amp;ldquo;database.db3&amp;rdquo;;&lt;/p&gt;
&lt;p&gt;public static SqliteConnection GetConnection ()&lt;/p&gt;
&lt;p&gt;{&lt;/p&gt;
&lt;p&gt;var dbPath = Path.Combine (Environment.GetFolderPath (Environment.SpecialFolder.Personal), db_file);&lt;/p&gt;
&lt;p&gt;bool exists = File.Exists (dbPath);&lt;/p&gt;
&lt;p&gt;if (!exists)&lt;/p&gt;
&lt;p&gt;SqliteConnection.CreateFile (dbPath);&lt;/p&gt;
&lt;p&gt;var conn = new SqliteConnection (&amp;ldquo;Data Source=&amp;rdquo; + dbPath);&lt;/p&gt;
&lt;p&gt;if (!exists)&lt;/p&gt;
&lt;p&gt;CreateDatabase (conn);&lt;/p&gt;
&lt;p&gt;return conn;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono的早期历史</title>
      <link>https://dodoro.chouxiangpai.com/archives/317/</link>
      <pubDate>Tue, 29 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/317/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Mono的早期历史&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Miguel de Icaza  2003.10.13&lt;/p&gt;
&lt;p&gt;Q:   你好，冒昧地问一下，是否在dotGnu of .NET 之前Mono项目就已经开始了？我很好奇。&lt;/p&gt;
&lt;p&gt;我在那时候开始着手Mono项目的开发，对于Mono，事情大概是这样的：&lt;/p&gt;
&lt;p&gt;2000年9月份，当.NET的文档出现的时候，我就开始对这个技术充满了兴趣，然后和所有人一样开始对字节码解释器进行研究，但是我面临一个问题：没有详细描述metadata的说明。&lt;/p&gt;
&lt;p&gt;.NET的最终文档是在2001年1月22日的时候发布了，那段时间我开始写信给.NET的相关人员，希望能得到那份遗漏的关于metadata的文档。&lt;/p&gt;
&lt;p&gt;我一边等待回复，一边开始开发自己的C#编译器，顺便当作第一个学习C#的练习工作，然后开始写解释器。&lt;/p&gt;
&lt;p&gt;写编译器的这段时间，Rhys联系了我，他已经通过反编译获得了一些早期的metadata代码格式，这是一项非常有趣的工作，那时候我们小组只有三个人一起努力：Rhys、Saurik和我。&lt;/p&gt;
&lt;p&gt;Sam Ruby发布了ECMA委员拥有的C#的二进制文档，虽然这并不是本来的安排。我并不知道事情会朝哪个方向发展，但是在2001年4月份，ECMA委员会发布了那份遗漏的文档。&lt;/p&gt;
&lt;p&gt;这就意味着我自己的C#编译器可以完成解析器的工作了，然后我开始在周围让大家试用我的编译器，同时我们可以开始完整地学习文档，用于构建一个开源项目。&lt;/p&gt;
&lt;p&gt;我们的研发工作包括：构建一个metadata读取器，这个工作人让我们很痛苦，因为Saurik已经做了一个了，他感觉他的代码没有被利用，而Rhys也有一个读取器，我个人并不是很喜欢（因为它不是基于Linux/Gnumeric代码风格）。&lt;/p&gt;
&lt;p&gt;从2000年9月份开始，我就感叹.NET框架的魅力，当我们在Ximian内部讨论它的优点的时候，我们会跟其他人的工作联想起来，比如“Labs”组织的CORBA、SOAP和Perl团队为Gnome绑定基础服务（别忘记了：支撑我们工作的动力是我们希望我们的APIs只需要编写一次，就可以使用任何语言来调用）&lt;/p&gt;
&lt;p&gt;“Labs”组织的努力工作最终结果是：Bonobo-conf,ORBit2, bonobo-activation, Soup, 和Perl/Gtk绑定，目的是希望创建工具提高我们的生产力：用更少的时间开发更多的应用，提升更高的抽象和标准在桌面应用上，以节省我们的时间和开发成本。&lt;/p&gt;
&lt;p&gt;他们的产品是积极有效的，但是所有这些用.NET框架都可以轻易实现。&lt;/p&gt;
&lt;p&gt;但是当我们完成学习的时候，我很清楚地知道是有可能去构建这样一种技术，他可以成为未来linux桌面的高效开发工具。请记住：从这个角度说，我们正在开发一个最大的桌面应用程序，随着时间的向前发展，最终都会开源（比如Mozilla和OpenOffice最开始也是收费产品，后面也变得开源了）。&lt;/p&gt;
&lt;p&gt;虽然我们已经拥有在构建开源项目的经验，但还要处理一些相对重要的代码还是很痛苦。&lt;/p&gt;
&lt;p&gt;Nat Friedman强力支持我们，希望我们的努力能获得更大的突破，我们获得了在Ximian实验室的管理权，大部分在Ximian实验室的开发人员都加入了Mono团队。我们团队的目标就是希望能创造出一个工具以提高开发人员的工作效率。&lt;/p&gt;
&lt;p&gt;我们保持平静，让我们的团队慢慢迁移到Mono项目中，大家逐步收缩自己手头上的项目，仅仅有两位保留在原来的项目，最后，Dietmar, Paolo, Dick和我都开始为Mono项目工作。&lt;/p&gt;
&lt;p&gt;Ravi马上就会加入我们，他会帮助我们开发C#编译器。&lt;/p&gt;
&lt;p&gt;很显然，一个小团队是不可能开发出一个完整的.NET框架的替代品的，所以我计划把Mono变成一个开源的项目。负责市场推广的Jon Perr知道我们把项目推广出去。&lt;/p&gt;
&lt;p&gt;我们原来计划在2001年7月19日公开发布，这样我们就可以赶上O&amp;rsquo;Reilly会议，Tim O&amp;rsquo;Reilly一直都很支持我们的项目，他从一开始就帮助Mono，当它还是一个很小项目的时候。当我们发布我们的项目的时候，我们同时发布了metadata框架、C#编译器和一些初始类库。&lt;/p&gt;
&lt;p&gt;所以官方地说，Mono的发布日期是那天，但是它酝酿了很久。&lt;/p&gt;
&lt;p&gt;对我来说，什么最重要并不是关键，因为Mono项目之于我意味着：一项帮助Linux在桌面获得成功的技术。当然，它有自己的生命发展周期，Mono并不是因为Ximain/Novell选择它所以才有它，对它的贡献和选择来自它的贡献者和选择者。所以，Mono要变得强大和壮大也要靠它的使用者。&lt;/p&gt;
&lt;p&gt;希望这样能回答你的问题。&lt;/p&gt;
&lt;p&gt;英文源地址 &lt;a href=&#34;http://lists.ximian.com/pipermail/mono-list/2003-October/016345.html&#34;&gt;http://lists.ximian.com/pipermail/mono-list/2003-October/016345.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>开源Mono</title>
      <link>https://dodoro.chouxiangpai.com/archives/309/</link>
      <pubDate>Fri, 25 Jan 2013 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/309/</guid>
      <description>&lt;h2 id=&#34;1-mono是什么&#34;&gt;1、 Mono是什么&lt;/h2&gt;
&lt;p&gt;Mono诞生于2001年，他的创始人是全球开源世界排名第5的墨西哥传奇程序员Miguel de Icaza和他的朋友。Mono最开始的团队Ximian被Novell收购，所以Mono项目一直是由Novell赞助。2011年Novell被收购，Mono的团队濒临被解散，Mono处于非常危险的境地。这时候，拥有大将风范的Miguel de Icaza领导团队自立门户，创办了&lt;a href=&#34;http://www.xamarin.com/&#34;&gt;Xamarin&lt;/a&gt;（http://www.xamarin.com/）公司，并担任CTO，Mono免于灾难。目前Xamarin公司发展迅猛，2012年7月获得了一笔1200万美金的风险投资，公司现在致力于开发出好用、高效、好玩的移动应用平台。&lt;/p&gt;
&lt;p&gt;Mono是.NET Framework 的一种开源实现。&lt;/p&gt;
&lt;p&gt;Mono项目将使开发者使用C＃写的.NET应用程序，能在任何Mono支持的平台上运行, 包括Linux、 Unix、FreeBSD和Windows。Mono项目将使大家能开发出各种跨平台的应用程序, 并能极大提高开源领域的开发效率。&lt;/p&gt;
&lt;p&gt;作为一个有机的.NET整体, 它包括一个C#编译器, 一个公用语言运行时环境，以及相关的一整套类库，他甚至还包括IDE、调试工具和文档浏览器。&lt;/p&gt;
&lt;p&gt;Mono项目的网址是：http://www.mono-project.com&lt;/p&gt;
&lt;h2 id=&#34;2mono的意义&#34;&gt;2、 Mono的意义&lt;/h2&gt;
&lt;p&gt;   Miguel de Icaza希望Mono希望实现“一次编写，到处运行”。Mono的目标是跨平台，跨语言。如果Mono成功的话，语言和平台对开发者的影响将变的很小，这也是Miguel de Icaza在创建Mono的时候就希望的——Linux的普通用户可以编写自己的程序（详《Mono的一些早期故事》见http://lists.ximian.com/pipermail/mono-list/2003-October/016371.html ）。Miguel de Icaza是GHOME的创始人，他自己深知要想让现代程序员采用c、c++语言为linux家族创建普通的应用程序太难了，这也是为什么他致力于推进Mono的原因，因为C#确实是目前最伟大最优美的语言，简单、易学，既可以快速开发出应用程序，也可以写出有深度的程序。目前Miguel de Icaza的目标在移动，他相信目前是移动互联网发展的高潮期，操作系统没有稳定，未来会诞生出操作系统层面的开发工具，他知道可能不会是java、也可能不会是object c，他希望是Mono，这也是为什么出现了MonoTouch和Mono for android。&lt;/p&gt;
&lt;p&gt;  当然Miguel de Icaza对C#也是很有感情的，从C#诞生之日就一直在推动C#语言的发展，他还亲自编写C#的编译器（这个编译器是基于gun的）。&lt;/p&gt;
&lt;h2 id=&#34;3mono的未来&#34;&gt;3、 Mono 的未来&lt;/h2&gt;
&lt;p&gt; 未来有无限种可能，而Mono的未来相信Miguel de Icaza自己很清楚，并且他会为此不断奋斗，他希望更多开源世界的人一起进来推动Mono。他并不是不喜欢c和c++，但是这两门语言不是桌面需要的；而java确实不怎么样，更何况现在活在oracle下面。C#是标准的、开放的（这也许是得益于它的创始人安德森），Miguel de Icaza基于它写出了Mono，相信Mono会有一个伟大的未来，即使不伟大，我们也可以用它来做伟大的事。&lt;/p&gt;</description>
    </item>
    <item>
      <title>我们团队决定采用Mono进行移动开发</title>
      <link>https://dodoro.chouxiangpai.com/archives/306/</link>
      <pubDate>Sat, 22 Dec 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/306/</guid>
      <description>&lt;p&gt;经过一个多月时间的深思熟虑，我还是决定和团队的成员选择Mono作为我们的移动开发框架，理由有三个：C#太优美了；我们希望跨平台跨语言开发程序；为开源世界贡献力量。&lt;/p&gt;
&lt;p&gt;我在2010年下半年开始参与ios应用的开发，现学了object-c，开发出了一个应用，当时公司还有团队在开发android的应用，2010年正直移动开发的爆发前夜。2011年的时候有同事聊过想一起出去做点事情，而移动互联网肯定是重点。于是开始着手做一些准备，无意间了解到了Mono的创始人开始创立自己的公司了，公司全力投入MonoTouch（Mono在很久以前也听说过）的研发，并且知道Mono for android正在开发中，很兴奋。我写信给Miguel de Icaza，咨询他关于他们产品的研发时间，他很快做了回复，并且说未来几个月时间就会推出产品。可惜后面公司变动，我去了百度，专注于LAMP下的开发。&lt;/p&gt;
&lt;p&gt;2012年中，我辞掉百度的工作，开始热血沸腾的“创业”，中途历经挫折，差点“未成创业，已经失业”，最后找到一个避风港，继续编写代码。到今天，终于再次有机会做移动端的开发了。我最后还是选择了Mono！&lt;/p&gt;</description>
    </item>
    <item>
      <title>“画一个火柴人”史诗版发布iphone、ipad和win8版本</title>
      <link>https://dodoro.chouxiangpai.com/archives/263/</link>
      <pubDate>Fri, 02 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/263/</guid>
      <description>&lt;p&gt;激动人心的一款游戏：“画一个火柴人”(&lt;a href=&#34;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&#34; title=&#34;Permalink to Draw A Stickman EPIC now available for iPhone, iPad and Windows 8&#34;&gt;Draw A Stickman EPIC&lt;/a&gt;) 游戏已经发布ios(ipad、iphone)和windows8的产品，去年他们发布网页版的时候，24小时获得了100w用户。在app产品里，开发团队融入了更多的场景，并且让玩家能大量地发挥自己的想象力。令人惊喜的是，这款游戏完全采用Mono来开发，主要基于MonoGame来开发，代码共享达到95%。他们的android版本也会在最近推出。&lt;/p&gt;
&lt;p&gt;如果你很喜欢，可以他们的官网&lt;a href=&#34;http://www.drawastickman.com/&#34;&gt;http://www.drawastickman.com/&lt;/a&gt;体验这款富有想象力的游戏。&lt;/p&gt;
&lt;p&gt;更多信息可以查看：&lt;a href=&#34;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&#34;&gt;http://blog.xamarin.com/2012/10/29/draw-a-stickman-epic-now-available-for-iphone-ipad-and-windows-8-2/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Wally McClure谈MonoTouch与Mono for Android的未来</title>
      <link>https://dodoro.chouxiangpai.com/archives/266/</link>
      <pubDate>Fri, 02 Nov 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/266/</guid>
      <description>&lt;p&gt;Wallace B. McClure是《&lt;a href=&#34;http://www.amazon.com/Professional-iPhone-Programming-MonoTouch-Programmer/dp/047063782X&#34;&gt;Professional iPhone Programming with MonoTouch and .NET/C#&lt;/a&gt;》以及即将出版的《&lt;a href=&#34;http://www.amazon.com/Professional-Android-Programming-Mono-NET/dp/1118026438/&#34;&gt;Professional Android Programming with Mono for Android and .NET/C#&lt;/a&gt;》一书的合作者。我们刚好在Xamarin将从Attachmate手上接管Mono这一消息公开前后进行这次采访的。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 现在距Miguel宣布Attachment裁员及创建Xamarin已经过去两个月了。您对这个情况有什么看法吗？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;第一个问题是在7月16号提出的，两天后Miguel宣布创建Xamarin以及与Novell合作。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 作为一个面向移动设备的.NET开发者，我有几个必须关注的问题。其中最大的问题就是：“我该如何针对移动平台进行开发才可以赚最多的钱？”对我来说，这相当于“我该如何开发iPhone和Android应用程序？”许多人跟我提起过iPhone开发，有时候也会谈到Android。那么作为一个.NET开发者，我该如何简单快速地针对这些平台进行开发？我可以去开发一个HTML 5应用程序，但是Web程序并不能利用设备的所有功能，客户也会要求原生应用而非Web应用程序。HTML 5应用会有一席之地，但是它们无法解决所有客户的所有问题。&lt;/p&gt;
&lt;p&gt;作为一个.NET开发者，如果想要开发原生应用，则可以选择学习Objective C和Java。学习语言需要一些时间，还包括开发环境等等。开发人员可能会认为学习语言没什么难度，但就我的感觉来说，事实并非如此，我没法使用一个周末的几个小时来学会一门语言。当然我也可以使用其他一些产品，例如把HTML应用程序作为原生应用的基础。然而，我还是时常会关注跨平台与原生应用之间的比较，所以我还在寻找其他方式。&lt;/p&gt;
&lt;p&gt;我比大部分人知道更多东西，因为我除了是一个开发人员，也会关注许多金融方面的消息。在2009年末至2010年初的时候，我听说了Novell的事情，他们正通过CNBC寻找买家。对我来说，这意味着可能会有些麻烦了。此外我还听说了Novell业务部门之间的一些摩擦，其中也包括Novell的裁员以及Xamarin建立的事情。我的看法是：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;市场并没有拒绝MonoTouch。我和许多付费用户交谈过，有些暂停使用MonoTouch/iPhone，不过并非所有人都拒绝MonoTouch，有些人继续在iPhone和MonoTouch上投入。&lt;/li&gt;
&lt;li&gt;已有的MonoTouch产品也不会就此无法使用了。我还是可以创建在iPhone和iPad上运行的程序，一切正常，而他们也认为可以在3个月内构建一个产品。他们是六月份动手的，所以九月份可以完成，这也差不多是下个版本iOS发布的时候。&lt;/li&gt;
&lt;li&gt;MonoTouch本身有一些风险。例如，Xamarin和他们的iPhone .NET产品可能会有一些版权纠纷。这是事实。我和一些比我更具有法律背景的人交谈过，他们提出的问题是：
&lt;ul&gt;
&lt;li&gt;Xamrin可能会面临这些风险。Miguel de Icaza已经对此发表过申明，表示这方面已经没有什么问题了。&lt;/li&gt;
&lt;li&gt;部分API是基于iOS及Andorid的API而定义的。不过这方面出现版权纠纷的可能性不大。&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;在Novell公布裁员消息之后的两个星期我重新尝试了Objective-C和Java开发，最后得到了与我2009年相同的结果。Objective-C与我内心所想相差甚远，对于.NET开发者来说会是十分陡峭的学习曲线。想要获益的唯一办法便是投入大量时间。对于我们这种已经在其他领域投入许多的人来说，这个门槛实在有些高。&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;在仔细审视了这些问题之后，我发现MonoTouch和Mono for Android依然有着十分重要的意义，这与两年前的状况一致。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 我们开始采访的不久，Attachmate就宣布向Xamarin提供有关“Mono，MonoTouch，Mono for Android以及Mono Tools for Visual Studio”的永久授权。现在法律问题已经解决了，你觉得采纳iPhone和Andorid上的Mono还有哪些障碍呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 这真是美妙的一周。一周前，我醒来后看到一堆指向 &lt;a href=&#34;http://ios.xamarin.com/&#34;&gt;http://ios.xamarin.com/&lt;/a&gt; 的内容，我发现Xamarin获得了这些工具永久的知识产权。这周末我又参加了Monospace会议，整整两天，我了解了许多关于Xamarin的消息，也和其他参与者进行了交流。上周我和一个潜在客户进行了沟通，他们是财富500强公司，对MonoTouch很感兴趣，已经投入iOS平台，并使用.NET开发他们自定义的业务应用产品。不过现实情况是，目前有些公司依然有顾虑。我想关于Attachmate的法律问题已经解决了，我估计接下来还会和其他一些公司达成协议，这会更进一步减少法律风险，我想接下来几个星期应该会有相关消息。从法律角度来说，我觉得已经没什么问题了。除了一些目前还无法得知的风险，我已经找不到暂缓使用MonoTouch和Mono for Android的理由。就我个人来说，过去的六个星期可谓是马力全开，我也会继续保持下去的。&lt;/p&gt;
&lt;p&gt;我还听说过一个问题，是说“MonoTouch和Mono for Android有bug，所以不该使用”。其实每个软件都有各种各样的bug，Android和iOS也都在持续更新，有问题都会即时修复。Xamarin的计划是定期更新他们的软件，就像过去24个月那样。当发现bug的时候，我们会在trunk上修复它，并打包在下次升级的版本中。之前的更新一直很有规律，我想这应该也会保持下去。发布频率大约是2到3个星期一次，所以你无需等好几个月才能获得新版本，而可以很快地更新，很快地更新项目。最终用户都不愿等待，我们都明白这一点。&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;InfoQ: 有没有哪方面你觉得是MonoTouch和Mono for Android做得尤其出色的呢？&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Wally McClure:&lt;/strong&gt; 理论上说，它们是向六百万.NET开发者开放了两个最流行的移动平台。对我来说，作为一个.NET程序员，在2009年早些时候还在考虑如何进行iPhone开发，那时候MonoTouch的出现真可谓神来之笔。我还是需要学习特定平台的内容，但我完全不需要学习新的语言，就好比Objective-C。这对我来说至关重要，在学习iPhone理念的同时还要学习Objective-C真可谓是难以逾越的高山。虽然我还是需要使用Mac，我必须使用MonoDevelop进行开发，但这笔投资还是相当值得的。我可以使用HttpWebRequest来调用服务获取内容，再使用LINQ处理数据，在许多地方都可以使用这些代码，这实在是太棒了。&lt;/p&gt;
&lt;p&gt;从技术角度来说，我会关注基础方面的内容。我每天早上都会在iPad上使用一款新闻工具，它时不时就会崩溃一下，我猜这是因为指针计算或是内存使用方面的问题。有了垃圾收集器之后，我们就可以减少内存使用的麻烦，也无需担心指针问题了。&lt;/p&gt;
&lt;p&gt;我认为它们还有一个重要的优势，它们是在运行平台上进行“真正针对性的开发”。简单的说，它们只是为底层操作系统提供了一个C#调用层，最终执行的还是平台上的原生API，只不过使用C#而已。这对开发人员来说十分关键。尽管我会推荐有关MonoTouch和Mono for Android开发的书籍，但我们完全可以通过一本使用Java的Android的书籍来学习Mono for Android。它们并没有为用户界面控件提供什么通用的容器，而是完全直接使用平台上完全相同的那些控件。MonoTouch应用程序和Objective-C应用程序完全相同，Mono for Android应用程序看上去也和Java程序毫无二致。这对用户来也是个优势。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono相关文章汇总</title>
      <link>https://dodoro.chouxiangpai.com/archives/186/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/186/</guid>
      <description>&lt;p&gt;一则新闻&lt;a href=&#34;http://www.techweb.com.cn/finance/2012-07-25/1218544.shtml&#34;&gt;《软件服务提供商Xamarin融资1200万美元》&lt;/a&gt;，更详细的内容可以看Xamarin的官方博客&lt;a href=&#34;http://blog.xamarin.com/2012/07/24/xamarin-raises-12m-to-help-you-make-better-apps-faster/&#34;&gt;Xamarin raises $12M to help you make better apps faster →&lt;/a&gt;。这篇新闻里告诉了我们目前Mono的用户规模“使用Xamarin软件的应用开发者已经超过15万，其中付费用户约为7500名。在Xamarin的客户中，还包括一些知名的企业，如美国国家仪器（National Instruments）和数字音乐订阅服务商Rdio等”。一直关注和研究Mono项目，今天把平常自己写的和园子里同学写的Mono的相关文章整理了一下，发现从2011年开始已经有非常的多人开始在项目中使用Mono，这里列一下这么多年来的园子里的相关博客内容和大家分享：&lt;/p&gt;
&lt;p&gt;2006年，Mono最新版是1.1.13，社区出现了第一本&lt;a href=&#34;http://files.cnblogs.com/shanyou/Mono%20A%20Developers%20Notebook%20Developers%20Notebook%20Jul%202004.rar&#34;&gt;《Mono: A Developer’s Notebook》&lt;/a&gt;。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/icehyp/articles/501114.html&#34;&gt;什么是MONO&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/likaincu/articles/405007.html&#34;&gt;什么是MONO再议&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/dflying/archive/2006/11/10/556379.html&#34;&gt;“另类”的.NET——Mono 1.2发布&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2006/03/05/343176.html&#34;&gt;.NET和JAVA的跨平台,我们很期望.但是容易吗&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2006/03/10/347500.html&#34;&gt;Mono 开发 (使用.NET技术的你，绝对不能忽略Mono)&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2007年，Mono最新版本&lt;a href=&#34;http://www.cnblogs.com/shanyou/news/2007/12/14/995443.html&#34;&gt;Mono 1.2.6&lt;/a&gt;，最新版本全面支持.NET 1.1,并部分与.NET 2.0兼容,包括支持Windows Forms。.net 现在赶上了java甚至在某些领域超越了java，而且.net借助于mono项目正在超越java的跨平台。微软在不断的走向开放，微软的codeplex已经上线，微软的asp.net ajax客户端框架，ironpython，ironruby，DLR等这些都是使用完全的开源协议，开始逐步纳入Mono的版本。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/cnlamar/archive/2007/03/04/663308.html&#34;&gt;倡议研究mono&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/babyblue/archive/2007/07/02/802444.html&#34;&gt;Mono的最合适的环境&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2007/10/31/943770.html&#34;&gt;Mono项目的新进展&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/hjf1223/archive/2007/12/20/OpenSource_JAVA_DotNet.html&#34;&gt;我会为开源和自由学习,使用JAVA.但我决不会为了开源和自由放弃.NET&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2007/12/20/1007854.html&#34;&gt;我也来说说.net开源&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/jejwe/archive/2007/09/02/878846.html&#34;&gt;Mono 1.2.5 发布,提供对IronPython和DLR的支持&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2008年，Mono的最新版本Mono 2.0，MonnoDevelop终于发布了一个Release版本1.0，Mono 2.0包括ADO.NET 2.0/ASP.NET 2.0/Windows.Forms 2.0/System.XML 2.0/System.Drawing/Linq/GTK#等类库的实现。这个release比1.x更为完整和成熟了。其中，C#编译器对C# 3的支持已经完整；标准库方面，WinForms 2.0的API已经完整支持，LINQ和ASP.NET的支持也比之前更为完善；执行引擎开始共享泛型代码后占用内存量减少了，同时Mono开始涉足iPhone开发领域的尝试，这也为今天的Xamarin融资打下了基础。有意思的是国内也出现了第一个Linux下的ASP.NET的Web服务器 &lt;a href=&#34;http://www.linuxdot.net/&#34;&gt;http://www.linuxdot.net/&lt;/a&gt;，后面在具体介绍。&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/03/16/1108043.html&#34;&gt;MonoDevelop 1.0 和 Mono 1.9(2.0 beta)发布了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/10/07/1305465.html&#34;&gt;Mono 2.0正式发布了&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/shanyou/archive/2008/03/11/monoiphone.html&#34;&gt;Mono运行于IPhone之上&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/flarejune/archive/2008/10/16/1312993.html&#34;&gt;利用Mono-cecil实现.NET程序的重新签名,重新链接相关库的引用&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&#34;http://www.cnblogs.com/dyj057/archive/2008/01/22/1048528.html&#34;&gt;在Linux上使用Mono连接MySQL数据库&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;2009年，Mono最新版本Mono 2.6，MonnoDevelop发布了2.0，同时Moonlight 1.0也发布了，微软的asp.net mvc 1.0也开源了，可以在Mono上跑了，微软已经开源了不少项目：ASP.NET MVC ,NET Dynamic Language Runtime (DLR),IronRuby,IronPython,Silverlight Toolkit,Ajax Control Toolkit,Managed Extensibility Framework (MEF) ，都可以在Mono上跑了，Mono就可以快速的走向成熟。&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]使用C#开发iOS、Android和Windows Phone跨平台应用</title>
      <link>https://dodoro.chouxiangpai.com/archives/182/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/182/</guid>
      <description>&lt;p&gt;  &lt;strong&gt;框架&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[![](images/mono-开发框架-300x226.jpg)](images/mono-开发框架.jpg)&lt;/p&gt;
&lt;p&gt;  &lt;strong&gt;工具&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;[![](images/mono-工具-300x225.jpg)](images/mono-工具.jpg)&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono 3.0正式发布</title>
      <link>https://dodoro.chouxiangpai.com/archives/178/</link>
      <pubDate>Tue, 23 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/178/</guid>
      <description>&lt;p&gt;  经过一年半的努力，我们终于发布了Mono 3.0的正式版本。&lt;br&gt;
  就像我去年说的一样，我们会尽快推动Mono 3.0的正式版的发布。我们努力压缩进度，尽快地让每一个Mono开发者快点。这就意味着从此以后我们的主分支开发会走上一个正常进度，并且未来会有更伟大的版本出现在我们的主要分支中。&lt;br&gt;
Mono 3.0的 &lt;a href=&#34;http://www.mono-project.com/Release_Notes_Mono_3.0&#34;&gt;release notes&lt;/a&gt; 列出了3.0的新内容：&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;p&gt;1、C＃异步编译器&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;2、统一的C＃编译器的所有配置文件&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;3、4.5异步API简介&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;4、集成新的微软的开放源代码的堆栈：&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ASP.NET MVC 4&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;ASP.NET WebPages&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Entity Framework&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;Razor&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;System.Json (replaces our own) System.Json（代替Mono自己的）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;新的高性能的垃圾收集器（SGEN - 许多性能和可扩展性方面的改进）&lt;/p&gt;
&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;大量的运行时和类库的改进。&lt;/p&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;原文地址：&lt;a href=&#34;http://tirania.org/blog/archive/2012/Oct-22.html&#34;&gt;http://tirania.org/blog/archive/2012/Oct-22.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono 之 Jexus</title>
      <link>https://dodoro.chouxiangpai.com/archives/167/</link>
      <pubDate>Thu, 18 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/167/</guid>
      <description>&lt;h2 id=&#34;jexus简介&#34;&gt;Jexus简介&lt;/h2&gt;
&lt;p&gt;     Jexus web server for linux 是运行在Linux上的Web服务器。其安装和部署及其简单，直接支持Asp.net 。&lt;/p&gt;
&lt;h2 id=&#34;下载jexus&#34;&gt;下载Jexus&lt;/h2&gt;
&lt;p&gt;　　wget &lt;a href=&#34;http://linux.j66.net/down/jexus-5.0.2.tar.gz&#34;&gt;http://linux.j66.net/down/jexus-5.0.2.tar.gz&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;然后解压：&lt;/p&gt;
&lt;p&gt;    tar -zxv -f jexus-5.0.2.tar.gz&lt;/p&gt;
&lt;p&gt;打开readme.txt 文件查看详细的安装、配置说明；&lt;/p&gt;
&lt;p&gt;安装Jexus&lt;/p&gt;
&lt;p&gt;　　jexus 基本无需安装，只需要解压，然后注册一下全局程序集即可。&lt;/p&gt;
&lt;p&gt;1）新建一个 /etc/jws/ 文件夹： sudo mkdir /etc/jws/&lt;/p&gt;
&lt;ol start=&#34;2&#34;&gt;
&lt;li&gt;拷贝解压好的文件到/etc/jws/ 文件夹中&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;3）进入 安装的文件夹， 运行sudo ./jws.regsvr&lt;/p&gt;
&lt;h2 id=&#34;运行测试&#34;&gt;运行测试&lt;/h2&gt;
&lt;p&gt;　　进入安装目录，运行sudo  ./jws.start&lt;/p&gt;
&lt;p&gt;打开浏览器输入 &lt;a href=&#34;http://localhost//info&#34;&gt;http://localhost//info&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;如果出现以下界面说明jexus 运行成功。&lt;/p&gt;
&lt;p&gt;如果没有 请查看一下log 文件，jexus 的默认日志文件夹为： log/jws.log&lt;/p&gt;
&lt;h2 id=&#34;web-server配置&#34;&gt;Web server配置&lt;/h2&gt;
&lt;p&gt;　　这里进行最简单的web站点配置，详细的配置信息可以查看 readme.txt文件。&lt;/p&gt;
&lt;p&gt; 输入vi siteconf/default&lt;/p&gt;
&lt;p&gt;修改其中的root 节为&lt;/p&gt;
&lt;p&gt;root=/ /home/ubuntu/www/monotest&lt;/p&gt;
&lt;p&gt;这里是设置URL的映射，前半部分表示虚拟目录根， 然后一个空格 后面表示网站的物理路径。&lt;/p&gt;
&lt;p&gt;添加：&lt;/p&gt;
&lt;p&gt;index=Default.aspx&lt;/p&gt;
&lt;p&gt;重启jexus.   可以使用 ./jws.restart 命令&lt;/p&gt;
&lt;p&gt;via：&lt;a href=&#34;http://www.cnblogs.com/keyindex/archive/2012/06/11/2545362.html&#34;&gt;http://www.cnblogs.com/keyindex/archive/2012/06/11/2545362.html&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>[转]Mono 之 Nginx</title>
      <link>https://dodoro.chouxiangpai.com/archives/170/</link>
      <pubDate>Thu, 18 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/170/</guid>
      <description>&lt;p&gt; 在Linux上部署网站需要先安装Web服务器端软件，IIS只能在windows上使用，相对的我们可以选择著名的apache、Ngnix等。本文将简单Nginx的安装、配置以及利用其运行一个简单的Asp.net 网站。&lt;/p&gt;
&lt;h2 id=&#34;nginx&#34;&gt;Nginx&lt;/h2&gt;
&lt;p&gt;    Nginx (Engine X)是一个高性能的Web服务器，由于其稳定、功能丰富、低资源消耗等特点，已经有很多网站利用它进行部署（国内不少大公司开始利用nginx 取代 apache，毕竟LAMP 太教条化了）。&lt;/p&gt;
&lt;p&gt;Nginx安装&lt;/p&gt;
&lt;p&gt;　　本文将从源码开始安装nginx 目前最新版为 1.2.0，所有的安装过程都是在Ubuntu操作系统下进行的。&lt;/p&gt;
&lt;p&gt;首先下载源码：&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt; wget http://nginx.org/download/nginx-1.2.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;然后解压&lt;/p&gt;
&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;tar -zxv -f nginx-1.2.0.tar.gz
&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;进入解压的目录后接着执行&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono</title>
      <link>https://dodoro.chouxiangpai.com/archives/155/</link>
      <pubDate>Tue, 16 Oct 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/155/</guid>
      <description>&lt;p&gt;Mono是一个由Novell公司（先前是Ximian）主持的项目。该项目的目标是创建一系列符合ECMA标准（Ecma-334 和 Ecma-335）的.NET工具，包括C#编译器和共通语言运行平台。与微软的.NET Framework不同，Mono项目不仅可以运行于Windows系统上，还可以运行于Linux，FreeBSD，Unix，Mac OS X和Solaris。 Mono现由Novell持有双重许可，这和Qt和Mozilla应用程序包的情况相似。Mono的C#编译器及其相关工具发布于GNU General Public License（GPL）之下，其运行时库发布于GNU Lesser General Public License（LGPL）之下，其类库发布于MIT License之下。这些均是开源协议因此Mono是一个开源软件。如果你打算向Mono贡献你的源码，则你须签署一个版权分派给Novell以允许它将这些代码在其它协议下再申请许可，从而允许Novell保留其双重许可的能力来持有Mono的商业协议。[1] 微软开发了一个称为共享源码公共语言基础（Shared Source Common Language Infrastructure，Shared Source CLI）的可用于FreeBSD，Windows和Mac OS X的.NET实现版本。微软的共享源码协议并不是开源软件协议，且可能对于社区来说也是不足够的（它明文禁止了对软件的商业用途）。我们还可以见到另外一个.NET实现版本，Portable.NET项目，该项目与Mono项目有着很多相同的目标。 Mono虚拟机包含一个实时编译引擎，该引擎可用于如下处理器：x86，SPARC，PowerPC，ARM，S390（32位模式和64位模式），x86-64，IA64和64位模式的SPARC。该虚拟机可以将代码实时编译或者预先编译到原生代码。对于那些没有列出来的系统，则使用的是代码解释器。&lt;/p&gt;</description>
    </item>
    <item>
      <title>跨平台移动开发商Xamarin融资1200万美元 用于提升服务</title>
      <link>https://dodoro.chouxiangpai.com/archives/129/</link>
      <pubDate>Wed, 08 Aug 2012 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/129/</guid>
      <description>&lt;p&gt;北京时间7月25日消息，据国外媒体&lt;a href=&#34;http://allthingsd.com/20120724/mobile-coding-startup-xamarin-lands-12-million-from-charles-river-ignition-and-floodgate/&#34;&gt;allthingsd&lt;/a&gt;报道。近日，跨平台移动开发软件服务提供商Xamarin获得投资1200万美元，投资商分别是Charles River Ventures，Ignition Partners和Floodgate。&lt;/p&gt;
&lt;p&gt;Xamarin公司是由两位联合创始人Nat Friedman 和Miguel de Icaza于去年共同创办，发展至今，已拥有7500多位付费用户，其中包括音乐服务商Rdio。Xamarin的技术帮助开发人员通过一套常见的编程工具来编写Android，iOS和Windows Phone软件。&lt;/p&gt;
&lt;p&gt;Rdio工程副总裁Todd Beeman在声明中表示，“我们拥有了Xamarin就等于拥有了一切，节省了大量工程时间，通过跨平台特性打造华丽、高性能的本地应用。”&lt;/p&gt;
&lt;p&gt;Xamarin创始人Friedman称，此次资金将用于改善公司服务并建立销售和营销工作。&lt;/p&gt;
&lt;p&gt;Friedman在一份声明中表示，“我们的使命是提供快捷、简单、具有趣味性的服务来创建强大的移动应用。在第一年中，我们取得了优异的成绩。每月有1.2万个新开发者和上百万美元的收入。这笔资金将帮助我们履行使命，使更多开发人员参与进来。”&lt;/p&gt;
&lt;p&gt;原文链接：&lt;a href=&#34;http://allthingsd.com/20120724/mobile-coding-startup-xamarin-lands-12-million-from-charles-river-ignition-and-floodgate/&#34;&gt;allthingsd&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Mono重生？Mono创始人成立新公司Xamarin</title>
      <link>https://dodoro.chouxiangpai.com/archives/138/</link>
      <pubDate>Sun, 10 Jul 2011 00:00:00 +0000</pubDate>
      <guid>https://dodoro.chouxiangpai.com/archives/138/</guid>
      <description>&lt;p&gt;Miguel de Icaza已成立了一个新的独立公司Xamarin，给Mono一个继续奋斗的机会。&lt;/p&gt;
&lt;p&gt;最近的消息称Attachmate公司对Mono框架不再感兴趣，这个消息已经北证实。Mono都创始人Miguel de Icaza终于打破了长久的沉默，透露他已经成立了Xamarin公司来继续支持Mono项目。&lt;/p&gt;
&lt;p&gt;Mono团队被Attachmate公司解雇，使Miguel de Icaza非常难过：&lt;/p&gt;
&lt;p&gt;一年以来我们一直都想把mono从Novell分离出来，大家一直认为独立成立一个公司将给Mono能带来更光明都未来。&lt;/p&gt;
&lt;p&gt;长话短说，分离 Mono都计划没被执行，反而在5月2日加拿大和美国都团队被遣散了，几天后欧洲、巴西和日本团队也不能幸免.这包括MonoTouch和 MonoDroid工程师以及其他主要Mono开发人员。虽然Attachmate公司解散了我们，但只要我们在Novell都一天我们会继续给我们都用 户提供技术支持。&lt;/p&gt;
&lt;p&gt;Mono项目有良好的前景，它为Linux以及IOS和Andriod提供C#以及框架支持。然而所有的实现都不是完善的。所以对开发人员都又局限 性。你不能简单快速的把.NET程序移植到Mono,因为缺失相应都框架类以及其它实现，尤其是WPF。同样的，如果使用Mono为iOS或 Andriod写个应用需要学习很多知识，它和在Windows Phone 7建立应用程序的关系不大。 还有在Mono中使用都微软的专利和知识产权问题，微软声称将来可能由于专利和知识产权而导致使用Mono的产生一系列的问题，现在不会对Mono有动作，但将来不见得。很多使用Mono做项目的开源支持者都视之为是个不定时炸-弹。&lt;/p&gt;
&lt;p&gt;除了Mono和Moonlight，Xamarin还计划商业产品，既定目标是：&lt;/p&gt;
&lt;p&gt;为iOS建立一个新都商业.NET;&lt;/p&gt;
&lt;p&gt;为Andriod建立一个新都商业.NET;&lt;/p&gt;
&lt;p&gt;继续为Mono和Moonlight贡献和开发;&lt;/p&gt;
&lt;p&gt;为Moonlight在移动领域以及苹果Appstore寻求机会;&lt;/p&gt;
&lt;p&gt;这两个商业项目需要更多都开发来为潜在的用户提供服务，需要更认真的工作。而且在移动领域以及苹果Appsotre来探索Moonlight的发展 也是件非常有趣的事情。Silerlight并没有成为微软声称的伟大的跨平台的统一者，目前来看貌似微软已经对其失去了兴趣。如果Mono能成为跨平台 的浏览器插件，可能会进一步触发微软的不定时炸-弹爆炸。这当然也不会被苹果所接受，因为这无疑是另一个Flash。&lt;/p&gt;
&lt;p&gt;当然一切都归结于资金，如果又足够的资金这个项目或许会有所成就，博客声称已经得到一些资金，而且还有在合同期的工程师们。这听起来比较危险，他们没有足够都资金，只能寄希望于一些勇敢都基金了。&lt;/p&gt;
&lt;p&gt;目前看来，Mono的用户都非常支持Miguel de Icaza和他的新公司。在他的博客评论中很多个人表示想投资，但前提是如果自己有钱。但这并不能对这事起到真正都改善作用。关键是.NET社区的反应以及微软的回应。&lt;/p&gt;
&lt;p&gt;如果你想帮助Mono，可用访问Xamarin的网站：Xamarin website&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
