① mono開發安卓的人多嗎
Mono for
Android開發調研筆記
安裝完Mono for Android(簡稱:MonoDroid)之後,可以用MonoDevelop或Visual Studio來開發Mono for
Android應用程序;目前只能在模擬器上調試和部署,必須購買後才能在真機上調試和部署;目前遇到的最大的問題是:模擬器上調試速度非常慢,通過單步調試每一行代碼都需要幾秒鍾。有人開了個帖子抱怨以及一些回復的相關討論:http://mono-for-android.1047100.n5.nabble.com/Free-version-Emulator-only-Bye-bye-td5091443.html,另外,如果購買了正式版,那支持直接用設備來調試的相關文章介紹:http://docs.xamarin.com/android/tutorials/debug_on_device
MonoDroid應用程序,應該說所有的Android應用程序只要在處理5秒後還未完成,則會自動提示用戶「應用程序無響應,是否結束應用」類似這樣的提示信息。所以我們一般在處理一些可能比較耗時的操作時,比如與伺服器進行通信請求數據或Post數據。這里操作都需要通過非同步的方式來完成;
MonoDroid提供的API與原生Java平台下的Android開發基本一致,類的名稱以及方法名稱都保持一致,這樣只要會開發原生的Android應用,那在MonoDroid下也可以開發;
雖然說MonoTouch,
MonoDroid可以允許我們用C#來開發在IOS以及Android應用,但是並不是所有的代碼都只要用c#寫一次就可以在這兩個平台上跑了。實際上,能重用的代碼也許只有業務層的代碼。因為UI的實現,兩種平台不同,MonoDroid下依賴於Mono.Android來實現UI,而MonoTouch下則是用另外一套不同的UI實現方式。實際上Mono更多的是考慮了與原生API一致的方式來開發UI,所以設計了兩套不同的類庫來實現UI架構;所以UI層的代碼無法重用;另外,數據訪問層,也不能共用,因為雖然都是訪問sqlite,但是Mono在這兩個平台上分別對應實現的API不同,MonoTouch下使用:MonoTouch.CoreData,而MonoDroid下使用Mono.Data.Sqlite。當然我們還是可以將數據訪問層進行抽象,比如抽象成IRepository,然後業務層調用IRepository的介面即可,IRepository的具體實現需要基於不同平台分別實現;
之前可以在Windows上跑的Castle框架在MonoDroid上不再支持,編譯會遇到錯誤,因為Castle程序集依賴於System.Configuration這個程序集,但是在MonoDroid平台上沒有這個程序集;MomoDroid平台上支持的.Net程序集有限,見下面的介紹。基於這個原因,但是又希望能像以前那樣使用某個IOC框架,所以找了一個跨各種手機平台的輕量級開源Ioc框架(TinyIoC),該框架非常小,只有一個cs文件就能使用,使用後感覺效果還不錯,基本容器功能都支持了。git開源項目地址:https://github.com/grumpydev/TinyIoC
log4net在MonoDroid上也不支持,因為:Log4Net uses classes in .Net namespaces such as
System.Web, and System.Diagnostics that are not yet implemented in Mono for
Android. 不過幸好,Android平台自帶了一個Log記錄器,在MonoDroid下可以使用Android.Util.Log來記錄日誌。如果是用Visual
Studio來開發,則可以直接在VS的Output窗口看到日誌,另外VS還有一個專門的窗口(View -> Other Windows ->
Android Device Logging)用來查看Android記錄的日誌。另外,也可以通過命令行的方式查看日誌,定位到目錄:C:\Program
Files (x86)\Android\android-sdk\platform-tools,執行命令:adb
logcat,詳細方法可以參考:http://docs.xamarin.com/android/advanced_topics/android_debug_log
MonoDroid的資料庫是用sqlite,目前內置支持兩種數據訪問方式:原生方式(游標的方式)以及ADO.NET類似的介面,使用起來ADO.NET的方式非常簡單,我們只需要引用:Mono.Data.SQLite這個程序集就能像ADO.NET那樣來訪問sqlite資料庫了。
游標方式舉例:
//查詢數據
ICursor cursor = this.db.Query(DatabaseTable, new[] { KeyRowId, KeyTitle, KeyBody }, null, null, null, null, null);
//新增數據
var initialValues = new ContentValues();
initialValues.Put(KeyTitle, title);
initialValues.Put(KeyBody, body);
this.db.Insert(DatabaseTable, null, initialValues);
//更新數據
var args = new ContentValues();
args.Put(KeyTitle, title);
args.Put(KeyBody, body);
this.db.Update(DatabaseTable, args, KeyRowId + "=" + rowId, null);
//刪除數據
this.db.Delete(DatabaseTable, KeyRowId + "=" + rowId, null);
//事務支持
this.db.BeginTransaction(); //Start a transaction.
try {
var result = func(); //Do update db operations.
db.SetTransactionSuccessful(); //tell db the update operations successfully.
return result;
} catch {
//Error in between database transaction
}finally {
//commit the transaction.
//if the setTransactionSuccessful method have not been called, then the transaction will auto rollback.
db.EndTransaction();
}
ADO.NET方式舉例,(需要引用:Mono.Data.Sqlite)
//查詢數據
public static IEnumerable<Note> GetAllNotes()
{
var sql = "SELECT * FROM ITEMS;";
using (var conn = GetConnection())
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
using (var reader = cmd.ExecuteReader())
{
while (reader.Read())
yield return new Note(reader.GetInt32(0), reader.GetString(1), reader.GetDateTime(2));
}
}
}
}
//新增和更新數據
public static void SaveNote(Note note)
{
using (var conn = GetConnection())
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
if (note.Id < 0)
{
// Do an insert
cmd.CommandText = "INSERT INTO ITEMS (Body, Modified) VALUES (@Body, @Modified); SELECT last_insert_rowid();";
cmd.Parameters.AddWithValue("@Body", note.Body);
cmd.Parameters.AddWithValue("@Modified", DateTime.Now);
note.Id = (long)cmd.ExecuteScalar();
}
else
{
// Do an update
cmd.CommandText = "UPDATE ITEMS SET Body = @Body, Modified = @Modified WHERE Id = @Id";
cmd.Parameters.AddWithValue("@Id", note.Id);
cmd.Parameters.AddWithValue("@Body", note.Body);
cmd.Parameters.AddWithValue("@Modified", DateTime.Now);
cmd.ExecuteNonQuery();
}
}
}
}
//刪除數據
public static void DeleteNote(Note note)
{
var sql = string.Format("DELETE FROM ITEMS WHERE Id = {0};", note.Id);
using (var conn = GetConnection())
{
conn.Open();
using (var cmd = conn.CreateCommand())
{
cmd.CommandText = sql;
cmd.ExecuteNonQuery();
}
}
}
//事務支持
using (var conn = GetConnection ()) {
conn.Open ();
var transaction = conn.BeginTransaction();
try
{
//Do db operations.
transaction.Commit();
}
catch
{
transaction.Rollback();
}
}
ORM,NHibernate不能運行在Mono for
Android上,不過手機應用的業務邏輯相對簡單,ORM的需求優先順序應該不是很急,暫時可以通過上面的數據訪問方式來訪問sqlite資料庫。
類庫方面,目前支持的.net類庫有限,主要有以下幾個:
1 mscorlib
2 System 包含System.Net命名空間,支持HttpWebRequest, HttpWebResponse,這兩個類可以實現與伺服器端通信
3 System.Core 包含IO, LINQ, Collections,etc
4 System.Data 該類庫實現了ADO.NET的相關基礎架構,如DataReader, DataAdapter, Connection, Command, etc.
5 System.Data.Services.Client
6 System.EnterpriseServices
7 System.Json 提供了簡單的JSON序列化和反序列化支持
8 System.Numberics
9 System.Runtime.Serialization
10 System.ServiceModel
11 System.ServiceModel.Web
12 System.Transactions 提供事務支持,包括分布式事務
13 System.Web.Services
14 System.Xml
15 System.Xml.Linq
16 Microsoft.CSharp
17 //以下幾個是Android開發需要的類庫
18 Mono.Android MonoDroid核心類庫,該類庫中提供的API與原生的JAVA API基本一致,所以使用起來很方便;
19 Mono.Android.Export
20 Mono.Android.GoogleMaps
21 Mono.Android.Support.v4
22 Mono.CompilerServices.SymbolWriter
23 Mono.CSharp
24 Mono.Data.SQLite 提供封裝了Sqlite資料庫的ADO.NET介面支持
25 Mono.Data.Tds
26 Mono.Security
與伺服器通信,可以像平時一樣通過HttpWebRequest或WebClient來發送請求。以下代碼設計了一個通用的通過非同步的方式發送HttpWebRequest
/// <summary>
/// 非同步發送HttpWebRequest
/// </summary>
/// <param name="cookie"></param>
/// <param name="url"></param>
/// <param name="postData"></param>
/// <param name="callback"></param>
public static void SendHttpPostRequest(Cookie cookie, string url, string postData, Action<HttpWebResponse> callback)
{
//解決https下的證書問題
HttpRequestCredentialHelper.();
var request = HttpWebRequest.Create(url) as HttpWebRequest;
//設置請求類型為POST
request.Method = "POST";
//設置Post的數據
if (!string.IsNullOrEmpty(postData))
{
request.ContentLength = postData.Length;
request.ContentType = "application/x-www-form-urlencoded";
using (var writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(postData);
writer.Close();
}
}
//將Cookie放入請求,以讓伺服器知道當前用戶的身份
var container = new CookieContainer();
request.CookieContainer = container;
if (cookie != null)
{
container.SetCookies(new Uri(Constants.ROOT_URL), string.Format("{0}={1}", cookie.Name, cookie.Value));
var logger = DependencyResolver.Resolve<ILoggerFactory>().Create(typeof(HttpWebRequestHelper));
logger.InfoFormat("HttpWebRequest CookieName:{0}, Value:{1}", cookie.Name, cookie.Value);
}
//非同步發送請求
request.BeginGetResponse(new AsyncCallback(asyncResult =>
{
var httpRequest = asyncResult.AsyncState as HttpWebRequest;
using (var response = httpRequest.EndGetResponse(asyncResult) as HttpWebResponse)
{
callback(response);
}
}), request);
}
發送請求示例代碼:
HttpWebRequestHelper.SendHttpPostRequest(null, url, postData,
response =>
{
var response = HttpWebRequestHelper.GetTextFromResponse(response);
//這里處理HttpWebResponse
//如果要反問UI相關元素,則需要封裝為一個委託然後在RunOnUiThread方法內執行
RunOnUiThread(() =>
{
var folders = _taskFolderService.GetAllTaskFolders();
_listView.Adapter = new TaskFolderAdapter(this, Resource.Layout.TaskFolderListItem, folders.ToArray());
});
});
分層架構,我覺得我們可以採用以下的分層架構:
UI 界面層,MonoTouch,MonoDroid分別實現
Model
模型層,實現核心業務邏輯,代碼可重用,如果採用DDD領域模型來實現,則可以包括:Service,Aggregate,Entity,VO,IRepository
Model.Infrastructure
基礎框架層,實現公共基礎代碼,供上層調用,如DI,log,configuration,httprequest, constants, etc
Model.Repositories 倉儲實現層,對Model層的IRepository介面的實現,不同平台採用不同實現
② Xamarin.Android(或者Android Studio)用的資料庫是Microsoft Access還是SQLite的
安卓一直用的是sqlite
③ xamarin.forms怎麼實現checkbox
protected void Page_Load(object sender, EventArgs e)
{
CheckBox chk = new CheckBox();
chk.Text = "testall"; // 這里可以換成資料庫的內容
chk.CheckedChanged += new EventHandler(chk_CheckedChanged);
chk.AutoPostBack = true;
Page.Form.Controls.Add(chk);
for (int i = 0; i < 10; i++)
{
CheckBox chk2 = new CheckBox();
chk2.Text = "test" + i.ToString(); // 這里可以換成資料庫的內容
chk2.Checked = (i % 3 == 0); // 這里可以換成資料庫的內容
Page.Form.Controls.Add(chk2);
}
}
void chk_CheckedChanged(object sender, EventArgs e)
{
CheckBox all = sender as CheckBox;
foreach(Control ctl in Page.Form.Controls)
{
if (ctl is CheckBox)
{
CheckBox chk = ctl as CheckBox;
chk.Checked = all.Checked;
}
}
}
④ C# Xamarin 如何將json 轉換 dt
對於處理json數據,建議你使用Newton.Json類庫
⑤ android開發轉什麼比較好轉
精彩問答
@醬哥哥:目前國內,NET
在winform架構和webform架構的面向企業級單位以及銀行還佔有一定的市場份額。縱觀互聯網和移動端相對就比較荒涼一點了。僅僅是幾個知名的互
聯網企業是不行的。無論在web開發還是在移動都沒有明顯優勢。無論.NET語言升級到什麼地步,要崛起目前看來只能依靠win系統的發展。但是隨
著.NET逐漸開源以及跨平台的支持,目前互聯網圈內對.NET叫好聲一片。由此可見.NET前途任然光明。堅持.NET的同時,也不要放棄學習其他語言
的機會。
@洛陽碼農:.net平台包含很多技術,你認為.net必學的技術有哪些?怎麼從菜鳥成為.net大牛?
@醬哥哥:從菜鳥變成大牛的老梗建議就是:實事求是,一步一個腳印。
首先明確自己選擇選擇技術方向,web方向、移動app方向、winform客戶端方向。
1、.net 平台使用的主流語言就是C#,所以必須學習C#的基本語法
2、基於.net 平台的web方向目前有傳統webfrom和mvc兩個架構各有優缺點,這兩個是必須學習的。
基於.net平台的winform
客戶端平台的有傳統winform架構和wpf架構的各有優缺點,這兩個企業用的也較多所以都需要學習。(本人做web方向的,所以對這兩個平台了解甚少,winform的較熟悉,wpf沒研究過,你根據自己的方向選擇學習)
3、移動app 非必學。
4、ADO.NET 數據訪問架構,這個無論哪個方向都要學習,不解釋。
5、如果選擇web開發,那麼http協議的基本原理(最基本的post和get數據傳遞方式)、html、js、jqeury(框架這個必學不解釋了)、css。
6、至於其他的新技術還是新框架,根據自己的需求選擇性學習,因為人的精力有限。有些東西哪怕是多麼牛B,相對於個人而言做到稍微了解一下即可。
@IT周見智:1)基礎先學扎實,C#(或其他.NET語言)基礎(比如語法、數據類型、事件委託、對象生命期、lambda等),這是前提
2)著重研究一個方向,web開發,桌面軟體開發,或者APP?這是專一 3)剩下來的就是積累經驗,平時多總結多謝博客,多學習充電吧。
我覺得學習哪個技術都可以按照這樣
@超級奶爸老譚:.NET的大環境下,開源資源比JAVA少得多,這方面令人堪憂啊,特別是現在移動平台的崛起,轉移到Android與iOS平台的人越來越多,最近兩年公司招聘中,收到.NET相關的簡歷越來越少。
@IT周見智:前兩年好像是這樣的。希望接下來情況有所好轉 :)
@leoxu:你好,我是外行,請問現在.NET最常見也是在WEB開發領域嗎?
@鈦元素:我來回答:.net在bs和cs方面都有廣泛應用,在嵌入式開發方面也有一定的應用。總之,開始學,現在就開始吧。
@IT周見智:並非只有web方面的 桌面軟體也比較多 像1樓說的嵌入式也有 並且隨著.NET開源跨平台的流行後 移動開發這塊想必也會增加
@鈦元素:您好!我想問下IL方面,是否有必要去學,現在已經可以開發bs和cs的系統了,進一步深入是去了解mac和一些開源框架,或者是控制項開發,涉及到.net底層的內容,對開發有什麼幫助嗎?
@IT周見智:當然有必要 這就像學習一門新的語言時 入門完成後 必然要想法子進階提升 :) 了解底層開發是有用處的
@ViperWhip:Hi,請問如果做Windows 桌面應用,應不應該從傳統的winform轉向用wpf?
@假正經哥哥:我的建議是別! winform 功能完全可以覆蓋wpf糟糕的體驗
@Force武裝衛隊:WPF使用XAML作為界面描述語言,界面與功能分離做的很好
@IT周見智:這個吧 要看什麼項目 最終用戶是誰 使用場合是什麼 這倆適合不同的情況
@noonoo:盡快轉移到wpf呀,這是最先進的編程。 學習wpf能順便吧win8.10的應用一起搞定。
@天下雨天:WPF也在進步。WPF的XAML語言易懂,另外還有一些數據綁定,依賴屬性,MVVM等概念,都是比較好的方面,UI模板也可以自己修改,另外還容易定製主題。相比之下winform的開發模式就比較醜陋了,WPF是趨勢。
@吳胤琦:您好web開發。.net在未來的跨平台方面會更方便好用嗎?據目前的資料來看都是基於mono的方式.
@IT周見智:個人感覺是的 .NET跨平台這塊似乎越來越明朗了 目前使用較多的是 http://www.jexus.org/
@SethFeng:SaaS平台,.Net是個好選擇嘛?
@IT周見智:雖然使用Java的多一些 但是周期可能要長一些 開發效率等偏低 可以嘗試.NET 兩個各有優劣吧
@Rwing:你好,請問是否有關注vnext(asp.net 5),你覺得等它出來後會對各大公司的技術選用有很大改變嗎?
@醬哥哥:我來回答,是的目前mono對.NET的支持沒有做到100%。下個版本VNEXT可以完全支持了。就圈子裡面現在用mono+jexus非常的好用。
@南湖船老大:WIN平台一直喜新厭舊,投靠.NET平台對技術投資有保障嗎?
@IT周見智:這個問題 網上很多回答喲 :) 我個人沒有這種擔憂 學好了 哪怕哪天ms倒了 轉其它技術也很輕松
@醬哥哥:我來回答下,並非喜新厭舊,而是.NET順應時代的潮流,一改之前固執己見的思想,就目前.NET的發展形勢來看有很大的前景,現在是.NET最光明時代的開始。
@_Elvis:F#會不會成為.net的主力語言?
@IT周見智:就目前來講 短期內應該不會 其實新版C#現在也越來越支持「函數式」風格編程 我感覺像這樣混合式編程風格會成為主流吧
@王洪旭:我在招聘會上,看到的開發崗位,基本都是.net web開發。web開發是潮流嗎
@IT周見智:是吧。像桌面軟體 嵌入式之類的也是有的,我本人帶的項目就是主要從事後者相關開發的。
@宜賓阿布:一直在做.net
web開發,最近都已經想換平台了。想問下1、vnext的前景如何;2、不考慮跨平台的問題,winform做gui,目前是否符合中國最普通網民的需求?
@IT周見智:關於第一個問題,可以看見張善友老師的博客,他比較關注.NET跨平台的問題
http://www.cnblogs.com/shanyou/p/3764070.html,也可以關注他的微信公眾號。 第二個 符合
@王濤:據我所知,wpf中很多winform的功能都沒有,例如,MDI窗體,SplitContainer等等,為什麼還要說wpf做桌面應用比winform做桌面應用有優勢,優勢又在哪裡體現
@IT周見智:不能說誰比誰更有優勢 兩者重點不一樣 你有覺得wpf做出來的界面會更美觀嗎 :)
@吉良吉影:你好,我想問一下,現在WPF還有必要嗎,我項目里正在用,但我總感覺沒什麼前途
@IT周見智:有需求 還是有必要的 :)
@Booklearn:據說.Net可以開發ios和安卓應用,請問.Net這方面的優勢明顯嗎??
@IT周見智:自從微軟宣布.NET開源跨平台後 確實有這樣的新聞不斷傳出 據我所知 微軟確實在和mono團隊合作 致力於開發跨平台app的實現
相信情況會越來越好
@Force武裝衛隊:.NET早就支持ios和Android的開發了,解決方案是xamarin提供的.
@醬哥哥:不明顯,目前.NET跨平台還是依靠MONO,在web 方面mono支持的相對穩定。但是在移動端還不是很好
@FlashCHen:據微軟VS2015跟Win10的介紹說明,以後我大.net會一統天下,對於這點你有什麼看法
是樂觀態度還是覺得是噱頭。再加上現在APP大趨勢下 .net
開發的優勢已經少了很多了。如果沒有整合一套出來,花時間去學習對以後的成長空間有幫助嗎
@IT周見智:這個我真不敢下定論 是不是噱頭 你懂的 :) 我還是那個觀點 學好當下的 基礎扎實一些 萬變不離其宗
@久永:現在很多企業項目開發時,對於使用EF還相當的反對,一個說差,一個說不靈活,以及對於資料庫支持的問題。請問在項目規劃時,如何去設計、去取捨,以便能規避EF的劣勢而更多的爭取能將
EF 使用到項目之中呢?
@烏龜殼:同感,比較不贊成在企業系統里用ORM,這些業務系統基本上查詢都很復雜,沒有一個明確的Object對表的映射,用XSD節省編輯查詢到類的轉換工作就好了。有時候甚至XSD只定義DataTable的結構,查詢還是在外部寫類實現,這樣靈活性和效率都還可以。
@Yamazaki:我覺得.NET領域,因為MS得IDE、工具等太強大,集成度太高,UI化的東西太多,導致入門簡單。但是深入比較難。因為入門簡單,導致.NET的整體薪資被拉低了。你贊成我的看法嗎?
@醬哥哥:其實有道理,但是薪資低和因為入門容易導致的可能不一定啊。因為這個和個人水平關系較
大。也是由於.NET入門容易導致較多人的水平比JAVA的要低,所以薪資低也導致整體.NET平均薪資較低。所以選擇.NET的人一定要保持學習,好用
的框架和控制項一定要知道實現原理才能夠對個人能力有提升。
@南湖船老大:PHP入門更低,但是薪資不低。.NET入門不高,但是後續投入太大,整體成本還是很高的。
@IT周見智:.NET職位平均薪資低 確實有一部分該方面的原因 但是也不乏薪資高的 我也見過很多薪水比較高的做.NET方面的
@mocou:大學時編程是從.Net入門的,OSC上難得有關於它的討論,我想問周先生現在.Net在國內大型互聯網公司里的應用多嗎?.Net的工作是不是只能在非互聯網公司找到?
@IT周見智:有 你上網上可以搜出很多互聯網公司使用.NET技術 有很多並不是純粹地使用單一的技術
@醬哥哥:據了解,國內知名的目前有攜程、當當、新蛋、京東(現在改java+.net)、CSDN、博客園。
@橙色卡爾:您好,因為公司現在開始逐步棄用.NET,我現在在學Java。但是自己.NET都還沒有學精通,很是糾結,對.NET技術還是抱有很深的情感的,不想就
這么放棄。通過我們公司這種現象,.NET是不是真的開始走下坡路了,還是這這是一個低谷期?想知道你對.NET技術未來發展走向的看法。
@songzu:我作為旁觀者回答你。他們都是.net的忠實粉絲,自然希望擴大其陣營。
對職業生涯而言,轉JAVA是毫無疑問的正確選擇。
全球前一百名的網站,只有極少數是用C#實現的。純前端領域更偏愛PHP,而涉及到重量級開發通常是Java作主力(都是APACHE的功勞)。C#對WEB的友好程度遠不及PHP,作為編譯行語言,其資料以及開源參與度遠不及JAVA。
C#的語言確實簡練。然而其開源的步驟來的太遲了。至少應該在wp7上市的時候就應該鋪路的。再者WP的步子邁太大了。扯到用戶的蛋了。目前的情況下,他
們會把metro界面走到黑,那破爛毛線許可權管理機制也要堅持到破產為止,有指望WP起來是沒戲了。移動平台未來的霸主毫無疑問是ANDROID的。而大
型企業的系統,應該是java的,中大型企業的市場是PHP的,小型企業的領域是PYTHON/RUBY/.net等語言的。如果你在二線以下城
市,.NET的市場還是有的。大多數政府機構的網站都是那些只會.net的高校教師搞的單子。
@假正經哥哥:現在看來,.NET還是 大有前途。 但是從業不必拘泥於語言 ,要有良好的編程思想,用什麼語言都是可以的,任何一種語言
學到精通都有廣闊的天空。
@水母干:你好,想請教一下,單純用.net做桌面應用的話,需要點微軟系的哪些技能?
.net做桌面應用,有什麼比較好的輪子,這些輪子跟QT對比有什麼優劣?
@IT周見智:.NET系的 winform wpf 可以用
@Minho:.NET做包並發電商平台,能hold住不?我們公司已經轉向java了!
@假正經哥哥:不是hold不住的問題,還是缺少行業經驗 ,有這方面經驗的人少,技術上完全沒問題
@ly_bing:做了3年,發現裡面東西裡面東西太多、太深,在這個信息大爆炸的時代,.net 搞大數據和物聯網方面該怎麼走?
@IT周見智:微軟有自己的雲計算平台(azure) 至於物聯網 我之前網上認識一個在寧波做跟物聯網相關的 .NET開發 這方面具體我沒接觸過
⑥ freesql表是否存在
存在。
FreeSql是一個功能強大的對象關系映射程序(O/RM),支持NetFramework4.0+、NetCore2.1+、Xamarin等支持NetStandard所有運行平台。
FreeSQL是一個資料庫管理和查詢工具,採用C#開發,支持MicrosoftAccess,MicrosoftSqlServer,Oracle,MySql和PostgreSql等資料庫。