Quantcast
Channel: MSDN 台灣部落格
Viewing all 136 articles
Browse latest View live

ASP.NET MVC5 你也會遇到的問題!

$
0
0

msdn-blog_1206-1211banner-01
  論壇精選更版囉!將帶來一則熱門疑問,與您分享、共同探討其中的解決方式,感謝 MSDN 小幫手整理相關的文章說明及影片精華,以解決你的煩惱絲,幫助大家更容易解決問題及蒐集資訊。

👉如有問題,都歡迎至 MSDN 論壇提問,將會不定期的整理熱門疑問,並提供相關的免費資源喔!

👉欲追蹤最新文章及熱門影片,MSDN台灣 不可錯過~

 

Microsoft-logo ASP.NET MVC5 的 Process.Start 問題

       主要是在公司的網域內,寫了一段程式,從資料庫伺服器 ( SrvA ) 抓取資料表,該資料表中記錄了檔案伺服器 ( SrvB ) 的路徑 ( 如:\\SrvB\分享\105\abc.tif、\\SrvB\分享\105\def.txt ),然後呼叫程式,讓系統自行選擇開啟該檔案的程式,結果使用 IIS Express 時,程式可以正常執行,如我預期般使用看圖程式把該檔案開起來了,但是如果改用本機 IIS 時,就會出現存取被拒的訊息。這是怎麼回事呢?

 

能怎麼做呢?

  • 無法由 ASP.NET 啟動處理程

      如果您從 ASP . NET 使用方法啟動處理序。 處理序可能會開始在背景 (您可以甚至看到它) 在工作管理員, 但您無法在桌上型電腦中看到,這會發生兩個原因。

     

    0383.channel-9-logoASP.NET MVC 5 新功能探索

      探索 ASP.NET MVC 5.0 與 ASP.NET MVC 5.1 的各種新功能增強,包括如何從 ASP.NET MVC 4 升級至 ASP.NET MVC 5 等實戰主題。

    0383.channel-9-logo進入 ASP.NET MVC 5 的世界

      

      不論是 ASP.NET MVC 的新手,或是已熟悉的老手,這門課將帶領你進入 MVC 5 的世界,並搭配 Visual Studio 2013 來介紹,包括 Scaffolding 的引擎,以及與其它 ASP.NET 開發框架 (SignalR, Web API 2) 的搭配介紹。 

 


欲觀看更多精彩課程請至 >> Channel 9 免費課程平台  MSDN 台灣部落格

🔥也歡迎加入 MSDN 台灣 粉絲專頁,鎖定每日最新的好文分享及精選課程喔!


【案例分享】展望亞洲科技公司橫跨四大運算平台

$
0
0

運用微軟開發環境及公有雲服務統整團隊,加速跨平台及延伸系統開發!

醫療的進步,需要各方的努力,IT 可以發揮的助益包括協助醫療院所及醫師簡化繁瑣工作,以及創造雙贏的醫病關係,這也是展望亞洲科技一直以來的奮鬥目標。

展望亞洲科技的醫療資訊系統(HIS)獲得全台五千多家診所和數十家地區醫院的採用。從 WindowsWeb、雲端到行動化平台,醫療及保健服務相關的解決方案一應俱全,全面採用微軟的開發環境和公有雲服務,則是展望亞洲科技的開發團隊事半功倍的秘訣。

展望亞洲科技公司技術長沈緯鴻表示:「我們當初是以 HIS 軟體為公司主要發展核心,隨著這麼多年公司的發展,陸續提供更多元的醫管服務。在未來,公司新產品的發展將全面走向 Web 化、雲端化及行動化,而 Visual StudioAzure Xamarin 的整合應用,為我們帶來更高整合度、更多現成服務元件的開發環境,讓我們可以更專注於開發及測試工作,免除維運軟硬體等基礎架構的負擔。」

 

1

中醫HIS畫面

 

HIS 新占率高達 65% 的市場領導品牌

醫界流傳著一句話說:「想開業的醫師只要找展望亞洲科技就能一次搞定。」在全台新開業的診所裡,展望亞洲科技的 HIS 系統有高達 65% 的占有率,證明此言不假。

在台灣,無論是診所或醫院,共通的重點需求就是健保申報,基本條款如藥物支付標準,每個月都有所調整,維運作業絲亳不能懈怠。而且,衛服部和健保署近年來新增加許多雲端服務,例如:電子病歷交換、雲端藥歷,面對持續變動的政令需求,沈緯鴻指出,最大的挑戰在時間,像是官方發佈的調整事項通常隔月或隔兩個月就生效,系統維護及更新速度必須非常快。

發展至今超過二十年的 HIS ,由六至七人編制的團隊負責維護。攸關健保申報的 HIS 需要許多週邊的配合,

例如:印表機、標籤機、讀卡機,因此,展望亞洲科技的策略是專注在 Windows 平台,並評估推出 SQL Server 版本以因應高診量診所及未來系統擴充的需求。

 

2

西醫HIS畫面

 

跨平台發展新系統及延伸應用

HIS 為基礎,展望亞洲科技逐步往外延伸產品,涵蓋 Web、雲端及行動化應用。以 Web 為例,就有網路掛號、與檢驗所及藥局的資料交換、長期照顧、日間照顧等,像是已經用於木生婦產科婦產科相關的照護系統就是完全 Web 化,為媽媽們提供多樣化的服務。

行動化應用如行動掛號 App,則鎖定必須定期回診檢查的醫療對象,例如:婦產科、慢性病、復健。而雲端化的慢性病管理平台,讓民眾可以自測血糖值上傳,也可以存取自己的資料。

 

3

行動醫療 APP

 

無論是 Web、雲端或行動化,全由編制十多人的新系統開發團隊負責,開發環境一律使用 Visual Studio 2015,並以 Azure 的 Visual Studio Team Services 做為版本控管工具,並利用 Azure 執行單元測試和壓力測試。沈緯鴻強調,愈來愈多醫療及保健服務上雲端,對系統造成的壓力幾乎無法預測,更需要善用公有雲資源。

長年來協助許多醫師開業執醫,讓展望亞洲科技因緣際會地踏入了房仲業,也成為使用 Azure 的起點,用於開發房仲業專用的 ERP 系統來管理買賣方資料及營業員的活動。以這個經驗為基礎,展望亞洲科技陸續推出醫療服務相關的雲端產品,2015 年是長期照顧系統、2016 年是日間照顧系統。

 

4

房仲業專用的 ERP 系統畫面

 

沈緯鴻說:「從 Web、雲端到行動化,希望團隊可以相互支援,後端的程式碼也可以全面統一,落實跨平台的開發機制。」此外,展望亞洲科技還採用 Xamarin 來強化行動開發,評估發現它的效能優於其他產品,而且對於原本就全面採用 C# 的開發團隊最有助益,人力的調配也最便利。

5

展望亞洲科技技術長 – 沈緯鴻 先生

開發團隊先行,企業同享新科技效益

身為微軟的金級夥伴,展望亞洲科技擁有豐富的資源做為助力,像是 MSDN 服務與 Microsoft Azure 的測試帳戶。展望亞洲科技預計將採用 Office 365SharePoint OnlineSkype for Business Teams 來串連全公司,包括台北總公司和台中及高雄分公司,像是醫管部門會為診所提供申報及勞基稅務服務,負責人員休假時的代理人工作交辦就可以利用這些工具進行溝通協作。

除了開發團隊,就連資訊部門也考慮走向雲端化,像是用於建立內部的備份機制。考量之一就是 Azure 提供的安全機制與機房規格都比自建更為完善,舉例來說,像是新增 SSL 憑證和特殊驗證機制;此外,Azure SQL Datbase 服務還有欄位加密功能,開發人員管不到欄位資料,所以可大幅提升資料安全但不影響程式開發。

沈緯鴻表示:「我們規劃導入 Scrum 敏捷開發與 DevOps,解決以往土法煉鋼的作法及時間虛耗的問題,希望開發團隊能更善用方法及工具來簡化開發及維運作業,同時也要持續運用微軟的雲端服務來提升全公司的協同合作能力。」


 想了解更多 雲端開發測試環境 相關資訊,請上 https://aka.ms/devtest-solution

Unity 遊戲開發挑戰賽 – 兩步驟取得參賽資格!快將您的遊戲帶到 Universal Windows Platform 和 Windows Store 吧!

$
0
0

  capture

本挑戰賽開放給有上架遊戲在 Steam Store、Google Play Store 或是 Apple’s App Store 且下載超過 10,000 次的開發人員,將您的遊戲帶到 Universal Windows Platform 並發佈於 Windows Store,只要兩步驟,讓您的遊戲可以連結超過四百萬台裝置,提供給更多用戶!官網請點這裡

獎項

9

 

競賽時程

 收件期間           2016/11/01 – 2017/02/28

 公開評選期間   2017/03/01 – 2017/04/30

 公布結果           2017/05/15

 

提交方式

步驟 1

提交截圖及 App URL

步驟 2

使用 Windows & Unity 開發您的 App 並提交 Windows Store App URL

註 – 截圖係指您的遊戲於 Steam or Google Play Store (Android) or Apple’s App Store 的 admin page 顯示超過 10,000 次下載量的截圖 註 1 – 提交之 App 必須支援 UWP Desktop

註 2 – 必須和先前提交的為同一款遊戲 App

 

評選方式

  將綜合評比 App 於公開評選期間 ( 2017/03/01 – 2017/04/30 ) 的下載量、收入以及用戶評分,挑選出 13 個 App,接下來會依以下兩大標準決選出前三名:

  • Success of Submission (25%): Success will be determined through analysis of the performance of the game in Windows Store which will consist of a combination of the following criteria, each to be weighted equally; total number of downloads, amount of revenue generated, and user ratings of the apps being submitted during the public performance period.
  • Creativity and Originality (75%): Will be determined though the assessment of how unique or differentiated the games is compared to games currently in Windows Store.

 

常見問題

Q:若我近期才剛將遊戲上架至 Windows Store,我的遊戲可以參賽嗎?

A:若您的遊戲是 2016/11/01 後發佈且完成步驟 1,那麼您是符合參賽資格的,但必須完成競賽網頁上的步驟喔。

Q:我於 2016/11/01 前上架了遊戲至 Windows Store,但我近期預計釋出更新版本,我可以用此更新版本參賽嗎?

A:這將由 Microsoft Unity 來裁定,視您更新版本是否有重大更新及改變而定。

Q:我如何知道我的遊戲是否成功上架 Windows Store?

A:Microsoft 會以 email 通知您。

Q:若我的遊戲提交至 Windows Store 但在競賽收件截止日仍尚未收到發佈成功的確認信怎麼辦?

A:您的遊戲必須在 2017/02/08 競賽收件截止日前成功發佈於 Windows Store 並完成 步驟 2 才算擁有參賽資格。

Q:Microsoft 開發人員帳戶要錢嗎?

A:只要您完成步驟 1 的註冊,Microsoft 會 email 給您一組 token 來免費啟用 Microsoft 開發人員帳戶。

Q:若我有技術上的問題,我可以從哪邊得到幫助?

A:您可以於 Windows Dev Center 內找尋您要的資源,或是至我們的論壇提問。

Q:我的遊戲一定要支援所有 Windows Universal Platform 嗎?

A:我們當然希望您的遊戲可以在任何裝置上執行,但就此競賽來說,必要的條件支援是桌面裝置。

Q:決選的評審是?

A:將由 Microsoft Unity 員工共同評選。

Q:未滿 18 歲可以參賽嗎?

A:不行。

Q:哪邊可以看到競賽的細部條款?

A:細部條款請點這裡

 

【案例分享】金士頓推動 IT 開發團隊的數位轉型 –結合 Visual Studio 與 Azure 發展行動化應用!

$
0
0

結合微軟雲端平台及開發環境,敏捷發展行動化應用!

  從 Scrum 敏捷開發到 DevOps,從舊有企業應用走向行動化、雲端化,金士頓科技總是以最領先的腳步來保持企業系統的創新與競爭力,而且一以貫之地採用微軟的解決方案如 Visual Studio 與 Azure,來確保 IT 開發團隊的效率和方法論的實踐。

  身為高科技製造業的金士頓,在推動 IT 開發團隊進行數位轉型的過程裡,成功結合了雲的力量、敏捷的開發方法、行動化的服務及應用。以在持續變化的市場裡,運用彈性快速的開發模式來因應需求的改變。

  金士頓台灣分公司資訊部副理郭家齊表示:「金士頓是間節奏很快的公司,我們雖然是企業的 MIS,卻是用網路企業的速度在工作。我們一直在思考如何運用雲的力量來協助我們開發和維運,微軟在雲和地都有先進且完整解決方案,彈性和整合度優於其他對手,是我們一直以來的最佳選擇。」

 

以公有雲打造行動開發及應用環境

  金士頓在台灣有四個 Scrum 團隊,業務支援範圍涵蓋美國、台灣、上海與深圳,開發環境統一採用 Visual Studio,主要資料庫為 SQL Server。郭家齊副理帶領的團隊於去年成立,成員共有六人,除了專責開發行動化應用,還肩負研究前瞻技術的使命,為其他開發團隊提供使用建議。

  郭家齊副理指出,今年是團隊在前端技術大量投入的一年,行動開發團隊的成立就是為了滿足終端使用者在行動應用的需求。這些使用者包括高階主管和經常差旅的人員,行動化有助於提升他們的管理效益和生產力。

  由於行動應用的變化很快,開發團隊本身也會嘗試各種新作法,因此一開始就決定要以雲端平台進行開發、測試和營運,免除每一次嘗試都得重新架設環境的問題。包括 AmazonGoogleIBM 和中國當地的服務供應

  商都曾列入評估,但金士頓以 .NET 為主要開發環境,考量銜接雲端的便利性、全球部署的規劃、以及和開發人員的配合度,Microsoft Azure 成為首選。

11

  行動開發團隊也積極進行整合,打通雲到地之間的路徑,可以隨需求選擇最適合的建置及交付環境,快速切換。值得一提的是,在發展新應用的過程裡,Azure 現成的服務元件如 Notification Hubs,不但相當實用,也讓金士頓免除從頭開發的心力。

 

從使用者需求出發的敏捷開發目標

  金士頓通常將 Sprint 訂為二週,但行動開發團隊則將 Sprint 縮短為一週,等於一個月有四個 Sprint。之所以如此密集,是因為行動應用主要滿足對外的需求,進行快速除錯及修正,才能更貼近使用者的需要;另一方面,行動開發團隊也持續發展許多創新功能,並以 MVP 的形式來做小規模的試用與驗證。

  每週一交付服務給使用者,當週也接收使用者的回饋,縮短 Sprint 時程的同時,更快速地回應了使用者的期望。團隊也因而達成了一週疊代的水準,而且一週只有五天,而非七天,顯見其求快求新的優異能力。

  郭家齊副理說:「一週疊代的時間太快,我們不能因為人工的單元測試而延後交付服務給使用者的時程,最優先的目標一定是交期和使用者的感受。所以,我們轉變了開發方法,實踐 DevOps 流程,以更專注於開發和維運的整合。」

  金士頓在台灣和美國的開發團隊全都是 Scrum 團隊,執行已有四、五年之久。進一步實踐 DevOps 的關鍵在串接流程,像是透過 Application Insights 功能提早知道系統的問題點,例如:資料庫可能會因資料量太大而變慢,就要預先找出變慢的時間點落在何時。金士頓也規劃進一步以機器學習結合 Application Insights,建立系統預測數據,值得注意的是,建立以雲端為基礎的實驗室也在計畫之列。

12

 

靈活系統的彈性與創新就是競爭力

  金士頓以客戶為導向,彈性的調整自家的供應鏈系統,而且出貨地點不同,出貨邏輯方式也會不同。因此,金士頓現有系統多為自行開發,或是自己整合少數使用的套裝軟體,從無到有地為新客戶的需求打造新的流程。

  所以,系統修改在金士頓是家常便飯,像是產線一有回饋就要立即修改,否則整條產線就會停在那裡沒法動。這種迅速反應的精神也在行動開發團隊身上體現,尤其行動開發的目標很明確,但大家都仍在摸索細節,只能邊做邊試,像是符合使用者在不同手機的操作行為就是一大挑戰。

  另一方面,行動開發團隊必須大量學習新技術,而新技術的學習門檻也愈來愈高,需要很多工具和智慧化技術來輔助,讓資淺的開發人員能夠快速找到所需的資源,微軟就是其中不可或缺的助力之一。

14

  郭家齊副理表示:「像金士頓這樣的製造公司在確保系統維運的壓力比軟體公司更大,為了持續出貨,系統不能停頓。但系統要維運,也要創新,對於前瞻技術的評估,安全性、開發心力和效益是必備的三大條件,微軟的解決方案則持續地滿足了這三大條件的要求。」


想了解更多 雲端開發測試環境 相關資訊,請上 https://aka.ms/devtest-solution

Connect(“demos”); // 2016: 全智慧自行車跨平台原生行動應用 BikeSharing360 完整範例就在 GitHub 上!

$
0
0

微軟喜愛開發人員,並且不斷地投資於雲端優先、行動第一的解決方案可以支援所有開發者、應用程式和平台共創美好的開發未來。

今年的 Connect(); 活動上,我們在 Scott Guthrie Scott Hanselman 的演講中發表了 15 個示範,如果您錯過了這幾場主題演說,強烈推薦您可以在 Channel 9 觀看重播

我們發表的新產品、服務和工具帶給您的 APP 創新體驗。我們享受在演說中展示範例以及建置真實世界應用,透過這些新科技切身體驗有可能發生的情境。今年,我們替 Connect(); //2016 範例展示建造了一個全智慧的自行車共用情境,並十分樂意分享所有的原始程式碼給您。

clip_image002_thumb5

bikesharing360_intro

 

 

BikeSharing360 是一個擁有 10000 台自行車,遍佈紐約和西雅圖 650 個據點的智慧自行車系統虛構案例。他們的目標是可以提供騎士一種現代化且個人化的體驗以及使用智慧功能在業務上。

在這個展示情境裏頭,我們替企業和消費者(自行車騎士)建造了一些 App

 

 

 


BikeSharing360 (企業)

紐約、西雅圖,以及更多地方!

  • 智慧管理我們的業務
  • 透過物聯網設備可以追蹤自有的智慧自行車車隊
  • 更加行動化、能獲得自行車維修報告
  • 智慧亭的臉部和語音辨識可以幫助顧客輕鬆進行租借
  • 智慧顧客服務:AI –透過機器人協助顧客服務

Bike Riders (消費者)

  • 方便行動!綠能環保!省時省錢又有趣!
  • 找到並租借自行車、管理您的騎程
  • 我的騎程:發現以及追蹤您的路線
  • 依據不同活動可獲得個人化的建議
  • 在騎車過程中有問題嗎?您可以和您的顧客服務專人助理 BikeSharing360 的機器人聊天。

BikeSharing360 的 app 整合套件

我們希望您能被啟發並且學習如何使用多項工具、產品和我們的微軟應用程式平台技能以釋放您的生產效率,幫助您的公司進行轉型,以及替您的客戶建置極度個人化的應用程式。

我們替 BikeSharing360 企業和自行車騎士建置了應用程式套件,以下架構圖將會提供為何我們要建造此應用程式的概觀:

bikesharing360_architecture

 

觀看範例,並下載程式碼

這一次我們發佈了多樣範例項目,分為七種不同的演示版本,現在都可以在GitHub中找到:bikesharing360_publicwebsite

1. 網站BikeSharing360: Websites on GitHub

  • 網站應用程式,聚焦在自行車租借以及企業使用者
  • BikeSharing360 公開網站 (MVC)
  • BikeSharing360 公開網站 (ASP.NET Core)
  • BikeSharing360 私人網站 (ASP.NET Core 1.1)

bikesharing360_privatewebsite

 


2. 行動應用BikeSharing360: Mobile apps on GitHubbikesharing360_xamarinapps

  • 自行車騎士:原生行動應用程式使用 Xamarin.Forms,可用於 iOS, Android 和 UWP
  • 維護系統:Cordova 跨平台行動應用程式

觀看演示

 

 

 

 

 

 

 


 

3. 後端服務BikeSharing360:  Backend services on GitHubbikesharing360_microservices

 

 

 

 


4. 單一容器應用BikeSharing360: Single container app on GitHub


5. 多個容器應用BikeSharing360: Multi container app on GitHub

  • 多個容器應用:更複雜的應用程式以演示設置持續交付的 Visual Studio 2017 RC。該專案接著透過 Azure Container Registry 佈署到 Azure Container Services
  • 觀看演示:Watch Donovan Brown demo a multi container app

6. 認知服務亭應用:BikeSharing360: Cognitive Services kiosk app on GitHubbikesharing360_kioskapp

 

 

 


7. 機器人應用BikeSharing360: Bot app on GitHubbikesharing360_botapp

  • BikeSharing360 智慧機器人:顧客服務整合 LUIS(語言理解智慧服務, Language Understanding Intelligent Service
  • 觀看演示:Watch Lara Rubbelke demo bot apps

 

 

 

 

 

 

 

 

 

 


你也可以觀看此 Visual Studio Toolbox 影片了解 BikeSharing360 示範 app 的從頭到尾概觀:

還有更多有關 Connect(); 的範例演示!

以下為幾項工具範例以演示我們 Visual Studio family of products 最新的進展:

當一位開發者是一件很棒的事,可以創造令人驚豔以及讓顧客滿意的 app 和服務,還可以建立你的事業。有了微軟的 Azure 智慧雲、強而有力的數據平台,以及彈性的開發工具,讓設計、建置以及管理跨平台和跨裝置的應用程式更加輕鬆簡單。

 

享受由我們演示團隊做出的 BikeSharing360 吧!

(本文翻譯自 https://blogs.msdn.microsoft.com/visualstudio/2016/12/14/connectdemos-2016-bikesharing360-on-github/

 

ComboBox 你問我答

$
0
0

combox-01

       本文選出一則熱門疑問,與您分享、共同探討其中的解決方式,感謝 MSDN 小幫手整理相關的文章說明及影片精華,以解決你的煩惱絲,幫助大家更容易解決問題及蒐集資訊。

👉如有問題,都歡迎至 MSDN 論壇提問,將會不定期的整理熱門疑問,並提供相關的免費資源喔!

👉欲追蹤最新文章及熱門影片,MSDN台灣 不可錯過~

Microsoft-logo ComboBox 選取相關問題

假設我有兩個 ComboBox ,第一個選取的話,第二個可選可不選,然後按下 Button 的話,就會出現第二個 ComboBox 因為沒選取的錯誤:

我的 ComboBox 是用此種方式建立的:

internal enum SelectType
{
a,

b,

c

}

要用的時候再寫這一條 “SelectType filter = (SelectType)this.cobSelect.SelectedItem;",但是不選時就會出現問題。

 

能怎麼做呢?

  • 語法

123

屬性值

Type: System.Object

目前所選取項目的物件;如果目前沒有選取的項目,則為 null。

 

  • 參考方法

假設使用者未選取時, 預設值要設定為 a,可以這樣做:

1也可以用 SelectedIndex 判斷是否有選擇,若這個值等於 -1,表示沒有任何選項被選擇。

 

Microsoft-logo 相關文章


欲觀看更多精彩課程請至 >> Channel 9 免費課程平台  MSDN 台灣部落格

🔥也歡迎加入 MSDN 台灣 粉絲專頁,鎖定每日最新的好文分享及精選課程喔!

【案例分享】FarmVet Systems 使用 SQL Server 與 Visual Studio 開發行動數據應用,提升農場獸醫生產力!

$
0
0

untitled-1-01

「農場獸醫們是行動工作者,他們漸漸地提高對智慧型手機和平板的仰賴,以及為了讓 VetIMPRESS 變成他們生活中的一部分(就像他們每天生活中會使用的聽診器和威靈頓靴子),這個解決方法必須能在手中的行動裝置執行。」

- George Brownlee : 創辦人暨執行長


  隨著農場的規模越來越大以及養的牲畜越來越多,農夫們必須花費更多心力在提升農場整體的生產力。他們需要知道如何透過微小的改變帶給農場更大的進步。例如,相較於請獸醫執行一些像是懷孕掃描或是蹄修剪等基本任務,現今的農夫們轉而向獸醫諮詢動物的健康和福利以幫助他們提升農場的效率和生產力。因此,獸醫們不得不改變商業模式。與其僅僅依賴他們的雙手,不如更加運用他們的專業知識。

  為了因應這項改變,獸醫們需要數據。他們需要在造訪農場之前,瞭解農場的表現以及動物們的健康狀況與生產力。他們也需要知道:隨著時間的推移,農場的表現如何變化,以及它與更廣泛之行業的關連。然而眾所皆知,農場的數據是非常零碎的,散落各處及未連接的銷售點系統、牛奶加工目錄、診斷實驗室和整個行業的政府監管數據庫。就連個別的獸醫實驗中的數據也往往非常零散。

  而以上就是這位年輕獸醫 George Brownlee,在愛爾蘭的 Belfast 服務牲畜農場和乳酪農場並開始他的實驗時所經歷的狀況。

  「為了提供我想要的服務水平給我現代農場的客戶,我在要去農場的前一天晚上熬夜到凌晨兩點鐘,必須去尋找各種網站以求得正確合適的資訊。或甚至在前一天到農場去收集電腦上的文件或是從書中獲得一些數據。我必須在 Excel 中做大量的數據分析,把它們印出來,然後隔天再帶著這些文件跟著我到農場去。」

  Brownlee 想要創造一個方式收集行業數據,整合農場資料,並且可以帶著它到處巡視。他想要替他所照料的動物們創造電子醫療病例,以及幫每個農場創造履歷簡介。

  所以在 2010 年時,他與北愛爾蘭的另一名獸醫合作成立 FarmVet Systems,一個獨立的軟體販賣商。並且創造了 VetIMPRESS,一種安全、以網路為基礎的軟體即服務解決方案,幫助獸醫們收集、標準化,以及分析和它們實驗中動物的健康以及福利有關的數據。

 

進入更進階的領域

  為了提供照料大型動物的獸醫和其他在不同農場間游移的服務供應者真正有效的解決方案,FarmVet Systems 的創立者知道他們需要一個可以在任何地方、任何裝置上存取進入的方法。「農場獸醫們是行動工作者」FarmVet Systems 的創立者兼 CEO George Brownlee 說到。「他們漸漸地提高對智慧型手機和平板的仰賴,以及為了讓 VetIMPRESS 變成他們生活中的一部分(就像他們每天生活中會使用的聽診器和威靈頓靴子),這個解決方法必須能在手中的行動裝置執行。」

  透過創造一種行動數據的解決方案,VetIMPRESS 讓獸醫在現有數據上收集到最多數據變得更簡單,並創造一種獨特的數據集讓他們可以在與客戶諮詢業務時使用。FarmVet 希望獸醫們和其他農場服務提供者能夠輕鬆的擷取數據,以便立即進行現場分析並告知他們診斷測試的決定。幫助他們辨識有可能影響農場生產力和效率的潛在問題,以及增加農場顧客端的可見性。

  為了替 VetIMPRESS 軟體建造一個行動 App,一個在 FarmVet Systems 的小開發團隊(包括四位在數據端和三位在應用程序端)使用微軟 Visual Studio 和 Visual Studio Tools for Apache Cordova。這樣一來,團隊就可以使用單一程式庫以定位給 AndroidiOS 和 Windows 等多種平台。

  「我們需要某種可以盡可能的交互越多平台的方法」Brownlee 說。「但是我們只有一個小團隊。我們需要可以適應內部技能的開發工作,因為這將會是我們產品提供的重要核心的一部分。只是我們已經沒有辦法僱用更多擁有其他技能的人才。使用 Visual Studio 意味著我們在建造這三個平台時可以省下百分之四十或更多的成本。」

 

給小團隊的大工作

  使用 Visual Studio,開發團隊不只可以減少成本,也可以減少上市所需時間。還可以避免特定平台的編碼,代表開發團隊可以避免一些如果嘗試替不同類型的設備將相同的功能帶到市場時會造成的問題(包括除錯和顧客支援等問題)。

  因為開發工作被簡化了,團隊持續在改進顧客的使用者體驗。獸醫可以進入他們的日誌,在給定日期的時間表上更新農場動物的紀錄,以及存取農場的歷史造訪紀錄。不論何時,只要裝置位於 Wi-Fi 提供的範圍內,App 會自動捕捉從 Microsoft SQL Server 2012 R2 伺服器傳來的新資訊並且推送更新給獸醫。除了可以擷取動物數據,這個 App 還可以傳送獸醫的實驗室工作並且將報告傳給顧客。並且,當數據流入,他會監視目標和門檻,在準備好被查看的特定數據傳入時會提醒獸醫。

  「我們能夠透過 Visual Studio 所建置出來的成品是非常廣泛的」Brownlee 說。「獸醫們需要足夠的數據以支撐一整天的工作,像是有幾千隻動物需要照料等等,以及當他們外出、寫報告和儲存影像時也要產生更多的數據。Visual Studio 在 App 如何到處傳輸數據這方面,讓整件事變得真的非常有效率。」

  VetIMPRESS 的顧客數量,一直不斷的在成長。現在還包括藥劑師、食品公司以及會使用到農場數據的其他組織。現在,他們已經可以存取過往不可用或未紀錄的農場和動物數據,以創造全面的動物健康和生產力願景,提供他們的顧客更好的服務。

(本文出自:Increasing farm productivity with mobile tools

【案例分享】威煦軟體採用 Visual Studio 及 Azure 以電子化推動台灣產業的環安衛管理升級

$
0
0

採用 Microsoft Azure 及 Visual Studio 打造環安雲,以專業及速度優勢快速因應法令及市場需求

8-18-35

圖: 威煦軟體團隊 (不包括遠端工作的工程團隊)

  以「B 型企業」(Benefit Corporation)為目標,在兼顧經營獲利與社會公益的前提下,威煦軟體投入環安衛管理軟體的開發,並在這塊新藍海獲得來自國內外知名企業的肯定。

  威煦以 Microsoft Azure 及 Visual Studio 開發的環安雲,是以 PDCA 循環為基礎的環安衛整合性管理平台,目前已有法規雲、化學雲、定檢雲三大功能模組,不但能快速因應持續變動的環安衛法令及大量的客戶需求,還兼具了導入成本低、上線快的優勢,協助台灣產業落實及強化環安衛管理。

  威煦軟體執行長董軒宇表示:「我們的業務模式是 B2B,必須選擇企業主流的解決方案,才能順利與企業環境接軌並獲得信任。拜訪過幾百家公司實地了解他們的 IT 環境,以及客戶對環安雲的高接受度,讓我覺得創業之初就選擇 Microsoft Azure 和 Visual Studio 真的是押對寶。」

 

以專業為先,改革環安衛管理

  從違法排放廢水、高雄氣爆到遊覽車翻覆意外,甚至是熱度未退的食安問題,其實全都是環安衛相關課題,這些事件不僅讓企業及個人蒙受損失,更是付出了巨大的社會成本。

  但長久以來,台灣在環安衛管理多是以紙本手寫搭配 Excel 的傳統作法,隨著多起重大事件讓政府頻繁修法且更趨嚴格,確保遵循法規也變得更為複雜且挑戰,運用軟體來協助管理、簡化作業是唯一的解答。

  然而,許多企業雖然有內部開發團隊,卻沒有環安衛管理的應用系統,因為環安衛領域高度專業,技術門檻極高,一般的 IT 團隊難以瞭解及掌握;此外,法令雖有規範環安衛人員的配置,但企業多採最低標準員額來僱用,造成環安衛人員極為忙碌,沒有餘裕協助系統的開發。

  這些挑戰成為威煦進軍市場的利基。董軒宇指出,環安雲的獨特優勢就是集結眾人的經驗和專業,而不只是單一公司閉門造車的專業,威煦的客戶群橫跨各種產業,功能開發幾乎都以客戶需求為先,長期下來已經形成可以直接遵循及採用的標準作業流程;同時,威煦擁有專業的安環與軟體開發團隊,更和顧問公司、驗證及訓練機構都有密切的合作關係,精益求精的速度也優於一般企業。

8-18-26

圖: 左起為 營運長 麥桓瑄、執行長 董軒宇

選用主流方案,接軌企業環境

  威煦的環安雲以雲端服務的形式運作,針對大型客戶亦可快速落地。創業之初對開發工具和公有雲平台的選擇,可說是威煦成功打進市場的關鍵之一。董軒宇說:「當初我選擇 C# 做為程式語言,並以市場資源如書籍、社群、中文化文件最多的開發工具為優先,而選中 Microsoft Visual Studio;此外,以企業級 Web 應用程式開發而言,ASP.NET 的開放性也優於其他競爭對手。」值得一提的是,身為 Microsoft BizSpark 計畫的成員,除了大量的課程資源,威煦也從群組的交流互動獲得許多助力。

  威煦決定放棄自建機房,改以公有雲平台運行環安雲時,也順理成章選擇了 Microsoft Azure。在董軒宇拜訪的幾百間企業裡,幾乎都有 Windows Server 主機搭配 SQL Server 資料庫的 IT 環境,而且 Azure 的市場認同度很高,就連許多資安控管極其嚴格的大型企業也願意使用,讓威煦幾乎不必花費心力與客戶溝通雲端的安全問題,Microsoft Azure 提供的固定 IP、資料庫加密、自動備份等內建服務,也讓客戶使用時更為安心。

  環安環管理軟體不僅要有專業知識為基礎,還要即時因應法令變化及客戶需求,威煦目前是以一週一版的步調做更新,版本控制和部署方式就顯得更為重要,Microsoft Azure 和 Visual Studio 所提供的完整支援讓威煦事半功倍,舉例來說,利用 Microsoft Azure 就能快速建置測試環境、彈性擴充效能。

  威煦軟體營運長麥桓瑄指出,臺灣企業常用化學品多達上萬筆,但因化學品種類繁多加上列管法規與計算方式複雜,許多企業對於管理方式與數量掌握都十分苦惱,這也是很多環安事故的根源。且被檢查機構檢查到缺失時,又得快速改善,否則就是連續開罰。此時,威煦成熟的產品加上一周內完成導入的速度優勢,就是協助客戶符合法規的重要關鍵。

 

擴展行動化支援和分析預測能力

  透過系統的線上對談功能,客戶可以隨時反饋意見及需求,敏捷式開發和微軟開發工具的結合,是快速回應客戶需求解決問題或推出新功能的關鍵,微軟的軟體改版速度快,讓威煦免於苦等新功能釋出。

  由於環安衛是走動式管理,威煦計劃今年推出行動 app,為了避免從頭開發或重新學習行動開發等問題,決定採用 Microsoft Xamarin 協助發展行動裝置版本。此外,Microsoft Azure 的機器學習、Power BI 等先進技術,也將協助環安雲強化分析及預測功能,例如:可量化的環安衛指數及智能分析等。

  透過環安雲,威煦協助台灣產業建立可以累積廠內安全知識的資料庫,即時對應法令修改與相關資訊,完整保存安環管理記錄。連帶地,這也解決了安環人才過於搶手而造成的高流動率問題,有了環安雲做為銜接,就能免除人員交接的落差和困難。

fullsizerender-3

  董軒宇表示:「Microsoft Azure 是超值、安全且高度整合的公有雲服務,Visual Studio 則提供完整的開發環境,在微軟團隊的協助下,讓我們能聚焦在專業,協助客戶解決環安衛管理難題,並持續降低風險、提升成效,與大家共同打造一個更美好、更安全的未來。」


Windows Communication Foundation 情境大解密!

$
0
0

 0223-01

        論壇精選更版囉!將帶來一則熱門疑問,與您分享、共同探討其中的解決方式,感謝 MSDN 小幫手整理相關的文章說明及影片精華,以解決你的煩惱絲,幫助大家更容易解決問題及蒐集資訊。

👉如有問題,都歡迎至 MSDN 論壇提問,將會不定期的整理熱門疑問,並提供相關的免費資源喔!

👉欲追蹤最新文章及熱門影片,MSDN台灣 不可錯過~

 

Microsoft-logo Windows Communication Foundation 都用在甚麼情境呢?

  想請教大家實際的經驗中,不知 Windows Communication Foundation 是否有較具體的應用實例 ?

 

能怎麼做呢?

  • .NET Remoting、WCF、WebAPI、Socket,該怎麼選?

    使用 .NET Remoting 的舊程式,需與伺服器建立連線進行高頻率雙向傳輸,計劃翻寫新版本。.NET Remoting 是 .NET 2.0 時代的技術,十年後多了不少選擇:WCF、Web API、SingalR … 選擇變多煩惱跟著來,該怎麼選擇才對?

0383.channel-9-logoSerious Web Services: Windows Communication Foundation (WCF), Web API, OData, and More


欲觀看更多精彩課程請至 >> Channel 9 免費課程平台  MSDN 台灣部落格

🔥也歡迎加入 MSDN 台灣 粉絲專頁,鎖定每日最新的好文分享及精選課程喔!

C# 7.0 新功能介紹

$
0
0

c7-0-01

這篇文章介紹了 C# 7.0 的新語法。這也是在 2017/03/07 發表的 Visual Studio 2017 中眾多新功能之一。

在 C# 7.0 新增了許多支援的語法,重點擺在改善效能、精簡程式碼、以及資料取用幾個部分。其中最主要的功能之一是 Tuples, 能讓你更容易的一次傳回多筆結果,另外 Pattern Match 新語法則簡化了撰寫針對特定資料型態與條件的程式碼。除此之外,C# 7.0 也包含了其他重要的各種新語法支援。希望所有的這些改變都能讓你更愉快的寫出有效率,簡潔的程式碼,同時也更有生產力。

如果你很好奇我們如何導引出這些功能的設計過程,可以查閱 C# Language design GitHub 網站,在那邊可以找到設計說明文件,設計提案,與大量的討論內容。

如果你覺得這篇文章內容很熟悉,也許是你曾經看過去年八月份 (2016/08) 發表過的版本。在 C# 7.0 最終定案的版本中有少數的異動,這些
異動都來自先前版本的眾多優良的回饋意見。

希望你喜歡 C# 7.0, 盡情享受它, Happy Hacking !!

Mads Torgersen, C# Language PM


譯註:

為了更清楚的表達這篇文章的內容,翻譯時我採用意譯,而非逐句翻譯。我也會適時補充字句,讓文章要表達的意義更清楚完整。

太多專有名詞,翻成中文反而對閱讀沒有幫助,因此這部分我保留原文,但是我會在譯註的部分額外補充說明。
期望這樣能更清楚的讓讀者了解內容。


Microsoft-logo 本篇文章,帶您看到以下 C# 7.0 新功能


Out 變數 (out variables)

在先前版本的 C# 中,out 參數的使用並不如我們期望的那麼的流暢。呼叫帶有 out 參數的 method 之前,你必須先宣告變數
並且將它當作 out 的參數傳遞才行。通常你不會 (也不需要) 先初始化這變數 (變數的內容會在被呼叫的 method 內覆寫),同時你也不能使用 var 的方式來宣告它, 你必須很明確的指定這變數的完整型別:

public void PrintCoordinates(Point p)
{
    int x, y; // have to "predeclare"
    p.GetCoordinates(out x, out y);
    WriteLine($"({x}, {y})");
}

在 C# 7.0,新增了 out 變數,可以在傳遞 out 參數時同時宣告這個變數:

public void PrintCoordinates(Point p)
{
    p.GetCoordinates(out int x, out int y);
    WriteLine($"({x}, {y})");
}

請留意,這個變數在包含它本身的 { } 封閉區塊範圍內,所以接續宣告後面的程式碼可以直接使用這些變數。
多數類似型態的語法沒有指定可視範圍,該變數可視範圍就等同於宣告他的區塊範圍。

通常 out 變數都會直接被宣告為傳遞的參數,編譯器通常能直接判定參數的型別為何 (除非 method 包含數個互相衝突
overloads 而無法判定),因此可以直接使用 var 的方式來宣告它:

p.GetCoordinates(out var x, out var y);

一般來說,我們常常在 Try... 這類的使用模式中用到 out 參數,它會傳回 true 或是 false 來代表執行成功與否,同時藉著 out 參數來傳回成功執行後的結果:

public void PrintStars(string s)
{
    if (int.TryParse(s, out var i)) { WriteLine(new string('*', i)); }
    else { WriteLine("Cloudy - no stars tonight!"); }
}

如果你不在意某個 out 參數的傳回結果,可以使用 _ 代表忽略它:

p.GetCoordinates(out var x, out _); // I only care about x

Pattern Matching (模式匹配)

C# 7.0 開始引入了 patterns (模式) 的概念。抽象的來說,他是可以判定資料是否具備一定 “形狀"(Shape) 的語法元素,並從該數值之中提取需要的資訊。

譯註:
Shape, 代表資料的 “形狀", 精確的來說包含資料本身型別包含哪些成員? 這些成員的數值是否落在預期的範圍?
patterns 可以讓判斷資料 “形狀" 的程式碼更為簡潔明確。

舉例來說,C# 7.0 支援的 patterns 有這幾種:

  • Constant Patterns (常數模式, 以 c 表示,c 是 C# 的常數表達式), 測試輸入的數值是否與 c 相等。
  • Type Patterns (類型模式, 以 T x 表示,T 代表型別,而 x 是識別名稱), 測試輸入的數值是否屬於類別 T? 如果是的話就把輸入的數值放到類型為 T 的變數 x 中。
  • Var Patterns (變數模式, 以 var x 表示, x 是識別名稱), 這種模式下永遠會匹配成功,此時 x 的型別與輸入的數值相同,這模式下只是簡單的把輸入的數值放到 x 之中。

這些只是計畫中的第一步 – pattern (模式) 是 C# 新型態的語法元素,我們期望未來能繼續新增更多的功能。

在 C# 7.0 我們用 pattern 來增強兩種既有的語法結構:

  • is expression (is 表達式) 現在可以在右方加上 pattern,在之前則只能定義型別。
  • switch 陳述式中的 case 子句,現在可以比對模式是否符合,過去則只支援常數數值

在未來的 C# 我們會增加更多適用 pattern 的語法。

使用 pattern 的 is 表達式

來看看使用 constant patternstype patternsis expression 使用範例:

public void PrintStars(object o)
{
    if (o is null) return;     // constant pattern "null"
    if (!(o is int i)) return; // type pattern "int i"
    WriteLine(new string('*', i));
}

如所見,pattern 變數 – 由 pattern 引入的變數,跟前面介紹的 out 變數非常相似,你可以宣告在表達式之中,而且可以直接就近在同可是範圍內直接使用他。

out 變數很相似的地方是,模式變數是可變動的,我們常將 out 變數與 pattern 變數,統稱為 expression 變數。

Patterns 常與 Try... method 一起使用:

if (o is int i || (o is string s && int.TryParse(s, out i)) { /* use i */ }

使用 patterns 的 switch 陳述式

在 C# 7.0,我們也擴大了 switch 陳述式的應用範圍:

  • switch 陳述式現在可以運用在所有型別 (不再只限於基本類型)
  • patterns 可以用在 case 子句
  • case 子句可以附加條件判斷式

這邊有對應的範例程式碼:

switch(shape)
{
    case Circle c:
        WriteLine($"circle with radius {c.Radius}");
        break;
    case Rectangle s when (s.Length == s.Height):
        WriteLine($"{s.Length} x {s.Height} square");
        break;
    case Rectangle r:
        WriteLine($"{r.Length} x {r.Height} rectangle");
        break;
    default:
        WriteLine("<unknown shape>");
        break;
    case null:
        throw new ArgumentNullException(nameof(shape));
}

這裡有幾個 switch 陳述式新增的擴充功能:

  • case 子句的順序是重要的:
    就如同 catch 子句一樣,多個 case 子句之間不再是沒有順序關聯的,而第一個符合條件的 case 子句會被選中。這點非常重要,拿上一個範例程式碼來說,代表正方形的這個 case 子句 (譯註: case Rectangle s when (s.Length == s.Height):) 應該要排在代表長方形的 case 子句 (case Rectangle r:) 前面,結果才會正確。另外,就像 catch 子句一樣,編譯器可以標示出永遠無法執行到的程式碼來協助你。在這之前,你無法也不需要指定多個 case 之間的評估順序,所以這並不是個破壞性的改變 (breaking change)。
  • default 子句永遠會最後才評估:
    即使在上述的例子中,null case 子句被擺在最後,他仍然會在 default 子句之前被檢查。這樣的設計是為了與現有的 switch 陳述句保持相容。然而,好的做法通常會明確的將 default 子句擺在最後面。
  • 擺在最後面的 null case 子句並不會無法被被執行到:
    因為 type patterns (類型模式) 依循 is expression 的例子,不會與 null 子句匹配。這可以確保 null 子句不會不小心被任何的 type patterns (類型模式) 給搶走,你必須更清楚該如何處理這種狀況 (或是把它留給 default 子句來處理)

由 case … 引進的 pattern 變數 ,他的可視範圍只限於對應的 switch 區段。

Tuples

想要從一個 method 傳回一個以上的傳回值是蠻常見的狀況。但是目前 C# 版本對這需求能提供的作法都不夠好。現有的作法有:

  • out 參數:
    使用上很累贅 (即使在前面的部分已經介紹了改良的語法),而且這方式也無法搭配 async method 一起使用。
  • 使用 System.Tuple<...> 型別來傳回值:
    需要手動配置一個 tuple 物件,同時也需要寫些冗長的 code 才能辦到。
  • 替每個 method 都自訂專屬的傳回值型別:
    得額外寫大量的 code 來完成這件事,但是目的只是暫時將多個數值組合起來而已。
  • 使用 dynamic 來傳回匿名的型別 (anonymous types):
    無法做到靜態型別檢查,同時將會付出很高的效能代價。

為了讓這件事做得更好,C# 7.0 新增了 tuple typestuple literals 的語法:

(string, string, string) LookupName(long id) // tuple return type
{
    ... // retrieve first, middle and last from data storage
    return (first, middle, last); // tuple literal
}

method 現在能更有效率的傳回三個字串型別的傳回值了,這範例將三個字串包成一個 tuple
呼叫這 method 的程式碼將會收到回傳的 tuple 物件,且能透過 tuple 物件個別存取這些封裝在內的資料:

var names = LookupName(id);
WriteLine($"found {names.Item1} {names.Item3}.");

其中 Item1 等等,為 tuple 內的元素預設的名稱,這方法能正常運作, 但是這命名方式終究不能很能清楚表達用途。所以你願意的話可以明確的替它們指定更適合的名稱:

(string first, string middle, string last) LookupName(long id) // tuple elements have names

現在這個 tuple 的元素能用更貼切的名稱來存取之內的元素了:

var names = LookupName(id);
WriteLine($"found {names.first} {names.last}.");

你也可以直接在 tuple literals 內指定元素的名稱:

    return (first: first, middle: middle, last: last); // named tuple elements in a literal

一般來說,你可以互相指派 tuple 的變數,而不用管他的名稱為何: 只要個別的元素都可以被指派,tuple 型別可以自由轉換為其他的 tuple 型別。

Tuplesvalue types, 而且它包含的元素都很單純的被標示為 public, 都是可異動的欄位 (mutable fields)。它們是 “數值相等" (value equality) 的,
意思是只要兩個 tuples 的所有對應的元素都是相等的 (而且 hash code 也必須相同),那這兩個 tuples 就是相等的 (hash code 也會相同) 。

除了傳回多個傳回值的情況之外,在其他地方 tuples 也很有用。例如,如果你需要一個包含多個 Key 的 Dictionary,你只需要拿 tuple 當作 Dictionary 的 Key 就可以了。如果你需要在 List 內的一個元素放置多個不同的數值,只要使用 tuple 型別並且搜尋這個 List。在這些情況中,tuple 都能正常運作。

Tuples 的實作必須依靠底層的泛型結構型別 (generic struct types): ValueTuple<...>。如果你使用的 target framework 版本還未包含它,你只需要透過 NuGet 取得他們即可:

  • 在 “方案總管" 內的 “專案" 上按右鍵,選擇 “管理 NuGet 套件…"
  • 選擇 “瀏覽" 頁籤,同時在 “套件來源" 項目中選擇 “nuget.org"
  • 搜尋 “System.ValueTuple" 並安裝

Desconstruction (解構 )

另一個使用 tuples 的方式是將他們 deconstruct (解構)。Deconstructing declaration (解構宣告) 是用來將 tuple (或是其他值) 裡面的部分拆解並個別指派到其他新的變數用的語法:

(string first, string middle, string last) = LookupName(id1); // deconstructing declaration
WriteLine($"found {first} {last}.");

deconstructing declaration (解構宣告) 中,可以在個別的變數上使用 var:

(var first, var middle, var last) = LookupName(id1); // var inside

甚至你可以在括號外面只用單一一個 var:

var (first, middle, last) = LookupName(id1); // var outside

你也可以透過 deconstructing assignment (解構指派) 將 tuple 解構後指派到一個既有的變數:

(first, middle, last) = LookupName(id2); // deconstructing assignment

Deconstruction 不只適用於 tuple,任何型別只要它包含 deconstructor (解構式, 無論是定義
在 instance method 或是 extension method 都可以) ,就可以被解構:

public void Deconstruct(out T1 x1, ..., out Tn xn) { ... }

在這個 deconstructor 裡定義的所有 out 參數,就是該型別物件解構後的所有項目。
(為何在這邊我們使用 out 參數,而不直接傳回 tuple ? 因為這樣就可以讓你為不同數量的
變數,分別定義多個 overloads (多載))

class Point
{
    public int X { get; }
    public int Y { get; }

    public Point(int x, int y) { X = x; Y = y; }
    public void Deconstruct(out int x, out int y) { x = X; y = Y; }
}

(var myX, var myY) = GetPoint(); // calls Deconstruct(out myX, out myY);

你可以用這樣常見的模式,讓 constructordeconstructor 的參數對稱排列。
就如同 out 變數的語法,我們允許你在 deconstructor 中 “忽略" 你不在意的 out 參數:

(var myX, _) = GetPoint(); // I only care about myX

譯註: 請勿將這裡介紹的 deconstructor 與一般物件導向語言 (如: C++, C# 都有) 常見的 descructor 搞混了。
這個段落介紹的 C# 解構式 (deconstructor), 是定義物件如何 “拆解" 為多個獨立的變數。拆解後原物件仍然存在。
而 C# 與 constructor (建構式) 作用相反的 descructor (解構函式), 則是定義物件要被銷毀前必須執行的動作。
兩者的中文譯名都同樣是 “解構" 請特別留意
對於 C# descructor 的說明,可以參考: https://msdn.microsoft.com/en-us/library/66x5fx1b.aspx

Local functions (區域函式)

有時,輔助函式只有在使用他的函式內才有意義。現在這種情況下,你可以在其他函式內宣告 local functions (區域函式):

public int Fibonacci(int x)
{
    if (x < 0) throw new ArgumentException("Less negativity please!", nameof(x));
    return Fib(x).current;

    (int current, int previous) Fib(int i)
    {
        if (i == 0) return (1, 0);
        var (p, pp) = Fib(i - 1);
        return (p + pp, p);
    }
}

local function (區域函式) 內,可以直接使用封閉區塊內的 parameters (參數) 與 local variables (區域變數),用法及規則就跟 lambda 運算式 的用法一樣。

舉例來說,iterator method 通常外面都需要包覆另一個 non-iterator method ,用來在呼叫時做參數檢查 (iteraotr 在這時並不會執行,而是在 MoveNext() 被呼叫時才會啟動)。這時 local function 就非常適合在這裡使用:

public IEnumerable<T> Filter<T>(IEnumerable<T> source, Func<T, bool> filter)
{
    if (source == null) throw new ArgumentNullException(nameof(source));
    if (filter == null) throw new ArgumentNullException(nameof(filter));

    return Iterator();

    IEnumerable<T> Iterator()
    {
        foreach (var element in source)
        {
            if (filter(element)) { yield return element; }
        }
    }
}

同樣的例子,不用 local function 的話,就必須把該 method 定義在 Filter 後面,將 iterator 宣告為 private method。這樣會導致封裝性被破壞: 其他成員可能意外的使用它 (而且參數檢查會被略過)。同時,所有原本 local function 需要取用的區域變數與參數,都必須做一樣的處理 (變成 private members)

改良的 Literal

C# 7.0 允許在 number literal (數字常數) 中,用 _ 當作 digit separator (數字分隔器):

var d = 123_456;
var x = 0xAB_CD_EF;

你可以將 _ 放在數字中的任何位置,來提高程式碼的可讀性,完全不會對數值本身有任何影響。

此外,C# 7.0 也引入二進位的常數表示方式,你現在可以直接用二進位的方式來取代過去十六進位 (例: 0x001234) 的表示方式。例如:

var b = 0b1010_1011_1100_1101_1110_1111;

Ref returns 與 ref locals

如同你可以在 C# 用參考的方式傳遞參數 (使用 ref 修飾詞),你現在也可以用同樣的方式將區域變數的數值用參考的方式傳回。

public ref int Find(int number, int[] numbers)
{
    for (int i = 0; i < numbers.Length; i++)
    {
        if (numbers[i] == number)
        {
            return ref numbers[i]; // return the storage location, not the value
        }
    }
    throw new IndexOutOfRangeException($"{nameof(number)} not found");
}

int[] array = { 1, 15, -39, 0, 7, 14, -12 };
ref int place = ref Find(7, array); // aliases 7's place in the array
place = 9; // replaces 7 with 9 in the array
WriteLine(array[4]); // prints 9

這在回傳大型資料結構時相當有用。舉例來說,遊戲程式可能會預先配置龐大的陣列來存放結構資料 (這樣是為了避免執行過程中發生 garbage collect,
導致遊戲暫停)。現在 method 可以直接用參考的方式傳回結構的資料,呼叫端可以直接讀取與修改它的內容。

同時,有些搭配限制來確保這樣做是安全的:

  • 你只能傳回 “能夠安全傳回" 的參考: 一個是外界傳遞給你的參考,另一個是指向目前物件的 fields (欄位) 的參考。
  • ref locals 在初始化時會被指向某個儲存位置,一旦指派之後無法再更改。

非同步的傳回型別

到目前為止,C# 的非同步 method 限定必須傳回 void, Task 或是 Task<T> 這幾種型別。C# 7.0 開始,也允許你用同樣的方式,從非同步方法傳回你定義的其他型別。

舉例來說,我們現在可以定義 ValueTask<T> 這個 struct 型別當作傳回值。
這可以避免當非同步執行的結果已經可用,但是卻因為要進行 Task<T> 的配置,而導致非同步執行的結果還在等待中 (awaiting 狀態)。許多涉及 buffering(緩衝) 的非同步操作時,這做法可以明顯地降低配置的次數,同時能帶來明顯的效能提升。

譯註: 例如非同步 I/O 的操作,我們會用非同步的方式將檔案的內容讀到 buffer 內,完成後再不斷重複同樣動作,直到檔案讀取完畢為止,這個動作也許會被重複上千萬次。此時由 Task<T> 替換為 ValueTask<T> 可能可以帶來明顯的效能提升。

也有很多其他的情況下,你可以想像自訂 “task-like" 的應用類型會很有用。要正確地建立它們並不是那麼的直觀,所以我們也不期待大部分的人能正確的使用它們。但是它們可能開始會出現在其他的框架或是 API,而呼叫者可以像過去使用 Task 一樣的使用他,傳回值與 await 等待結果

更廣泛的 expression bodies 成員

在 C# 6.0 以前,expression bodied methods, properties(屬性) 等功能大受歡迎,但不是所有的成員都可以
使用。在 C# 7.0 中,accessors (存取子), constructor (建構式) 與 finalizers (終結器) 都已加到可以使用 expression bodies 的清單中:

class Person
{
    private static ConcurrentDictionary<int, string> names = new ConcurrentDictionary<int, string>();
    private int id = GetId();

    public Person(string name) => names.TryAdd(id, name); // constructors
    ~Person() => names.TryRemove(id, out *);              // destructors
    public string Name
    {
        get => names[id];                                 // getters
        set => names[id] = value;                         // setters
    }
}

這個新語法的範例程式並非來自 Microsoft C# 編譯器的團隊,而是由社群成員貢獻的。太棒了! Open source!

Throw 運算式

要在運算式之中丟出一個例外 (exception) 是很容易的,只要呼叫 method (在 method 內擲出 exception) 就可以了。但是在 C# 7.0 我們允許在運算式之中直接就地丟出 exception:

class Person
{
    public string Name { get; }
    public Person(string name) => Name = name ?? throw new ArgumentNullException(nameof(name));
    public string GetFirstName()
    {
        var parts = Name.Split(" ");
        return (parts.Length > 0) ? parts[0] : throw new InvalidOperationException("No name!");
    }
    public string GetLastName() => throw new NotImplementedException();
}


🌟 更多最新文章及資訊 >> MSDN 台灣粉絲專頁 MSDN 台灣部落格

🌟 更多熱門課程影片 >> Channel 9 免費課程平台

【案例分享】採用 .NET Core,Acano Manager 獲得了 Linux 的擴展能力和開源彈性能力

$
0
0

調整規模以滿足視訊會議的蓬勃

在過去幾年中,視訊會議與及語音會議在需求和功能方面都大幅成長。VQ Communications 透過其 Acano Manager 軟體,已經在第一時間見證了市場的蓬勃發展。Acano Manager 控制 Cisco Meeting Server,實現視訊會議,提供用戶和會議場合,並提供操作人員待命管理儀表板、以及報告和分析。

部署的規模從相對較小,數百個視訊通話,到更大的系統,數千個同時進行的視訊和語音通話。VQ Communications 開始注意到,在 Linux VM 設備上運行 Mono 版本的 Acano Manager ,連接到 Cisco Meeting Server叢集時會出現問題。

VQ Communications 的軟體架構師 Jonathan Channon 說:「每個 Cisco Meeting Server都可以承載數百個高清視訊通話或數千個語音通話。但我們發現當一個叢集中有超過兩台 Cisco Meeting Server 的時候,Mono 版本的 Acano Manager 開始會有網路 IO 的問題,網站對 Meeting Server 的請求就會失敗,而且無法恢復。如果我們無法可靠地發送指令,那我們就完蛋了。」

 

一個程式碼庫,橫跨兩個平台

當微軟宣布推出適用於高度可擴展系統的輕量級跨平台框架 – .NET CoreVQ 將其視為能解決他們 Linux 可擴展性問題的潛在方案。大概在 9 個月內,VQ 就將 .NET 版本的 Acano Manager 2 移植到了 .NET Core ; 也包含資助 Nancy, 開源網站框架移植到 .NET Core

藉由 .NET Core 版本的 Acano Manager,客戶可以在 Linux Windows 上獲得原生操作系統功能之外,更獲得效能的提升。VQ Communications 的執行長 Mike Horsley 表示:「將 Acano Manager 放在 .NET Core 上,讓我們可以為 Windows Linux 客戶提供相同的程式碼庫。」

 

開源帶給我們更大的自由

.NET Core 的另一大優點是,它允許開發人員選擇他們想要使用的任何工具。

Channon 說道:「.NET Core 跨平台的優勢,允許開發人員更自由地開發產品,因為不論是 macOSLinux Windows,最後都能運行 .NET Core,這可以提高生產力並縮短產品的上市時間。」

Horsley 認為 .NET Core 在開源方面帶來的效益,既能解決問題又能為新技術鋪路。他說:「如果我們在堆疊中發現問題,可以直接深入研究以找出問題,現在我們可以完全存取 .NET Core 的程式碼庫這件事實在是太棒了。另外,我們現在也在其他平台上都採用 C#,我們可以實現 Docker 這樣的技術,提供創新和創造價值的巨大潛力。」

 

👉  了解並準備開始使用 .NET Core

 

.NET Core 跨平台的優勢,允許開發人員更自由地開發產品,

因為不論是 macOSLinux Windows,最後都能運行

.NET Core這可以提高生產力並縮短產品的上市時間。」

 – Jonathan Channon:軟體架構師,ASP .Net MVP

 

04aceda02200496aa84e8c349b2b9e53

 

 

(本文出自:Acano Manager gains Linux scalability and open-source flexibility with .NET Core

【案例分享】Raygun 有了.NET Core,App 效能監控的處理能力比起原本的 Node.js 提高了 20 倍!

$
0
0

高效能、即時應用程式監控

開發人員都知道,幾乎所有的軟體都有一些小缺陷。但只有約 1 % 的終端用戶回報問題 ; 即使他們做了,通常還是不會提供開發人員解決問題所需的完整資訊。Raygun 雲端的錯誤與毀損回報平台正面臨著這樣的挑戰。它默默地監控網頁和行動應用,每日檢測數十億個錯誤數據點和毀損事件,然後透過詳細的診斷報告即時通知開發人員。

該產品的核心是使用微軟 .NET 技術和 Visual Studio 工具。而其 API 節點應用程式,負責從客戶端接收數據、進行驗證並審核通過,則是採用 Linux 上的 Node.js 技術以支持應用能夠快速地調整規模大小。

隨著時間的推移,Raygun 工程師注意到 Node.js API 的效能降低了。Raygun 聯合創始人兼技術長 Jeremy Boyd 說:「隨著新版本的出現,我們發現 Node.js 作為一個框架已經變得越來越慢、負擔越來越重。」 工程師考慮要增加伺服器數量,但是即使雲端伺服器的成本相對較低,大幅增加還是會導致成本上升。

 

用 C#編寫 Linux 應用程式

Raygun 開發人員決定專注於最大化現有的 API 節點的效能。當公司知道微軟即將發佈 .NET Core,一個開源的 .NET 平台,允許開發人員使用 C# 編寫 Linux 應用程式時,他們就立刻開始著手使用。Raygun 執行長兼創始人 John-Daniel Trask 提到「我們的程式碼庫大部分都是以 C# 撰寫,所以我們的工程師能夠使用它來對 API 層做修改,表示有更多的人可以在此專案上工作。」

兩個開發人員花了兩個星期將 API 移植到 .NET Core,緊接著驗證測試工作負載的效能。當他們滿意地發現 .NET Core 版本的 API 是正確的,他們啟動了一組運行新軟體的節點,然後將這些節點加入現有生產環境的節點叢集中。當 .NET Core 節點成功運行,Raygun 才逐漸汰換原先的 Node.js 節點。

 

「透過 .NET Core,我們可以使用相同大小的伺服器,

從原本 Node.js 節點每秒處理 1000 個請求提升到每秒處理 20,000 個請求。」

 – John-Daniel TraskRaygun 執行長兼聯合創始人

 

7b2b5e67e3db4a09bcfb0c85378082b4

 

提高了 20 倍的處理能力

效能的改善是立竿見影的。Trask 表示:「透過 .NET Core,我們可以使用相同大小的伺服器,從原本 Node.js 節點每秒 1000 個請求提升到每秒 20,000 個請求。」處理能力增加了 20 倍,意味著 Raygun 可以將自身伺服器數量減少 60 %Raygun 可以更進一步降低伺服器數量、以降低成本,保持更高的生產量進而更有效地處理突發尖峰狀況。Boyd 說:「當我們需要時,備用盒已經啟動並準備好加載,還能同時節省資金,完全是個意料之外的好處。」

 

 👉  了解並準備開始使用 .NET Core

 

(本文出自:App performance monitoring provider increases throughput by 2,000 percent with .NET Core

宣佈釋出 Visual F# 工具每日編譯版本

$
0
0

  在我們部落格之前的文章 (Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017中有提到過,我們很快就會針對 Visual F# tools 提供新的釋出方式。而那個時機已到!讓我們來回顧一下,每日編譯版本是指在 master 分支中,每次成功建置的 commit,通過持續整合系統的驗證成功後所得到的版本,即稱為:每日編譯版本。

  每日編譯版本會包含新功能、Bug 的修正以及現有功能的改善,這些改善也終將會擠身於正式的 Visual Studio 更新或釋出。針對 VS 2017 RTM,我們強烈推薦使用最新的每日編譯版本 Visual F# Tools,在目前最新的每日編譯版本中,已經包含了許多 Bug 的修正、效能改善與加入了一些跟 VS 2017 正式版本相比起有更好使用體驗的新功能。


  目前共有兩種方法可以取得每日編譯版本,在這邊特別提醒:以下的方式只會針對 F# IDE Tools 安裝最新的每日編譯版本,其餘如:F# 編譯器、FSI 或 FSharp.Core 均不會受到影響。

 

 通過 Visual Studio 中的擴充功能和更新 (推薦方式)

這是我們推薦使用的方式,以下的步驟將會帶你走過如何設定擴充功能和更新的來源指向到Visual F# Tools的每日編譯版本來源,設定完成後,每當有新的VSIX發布後,即會自動從Visual Studio的到通知。

 

  1. 開啟 工具→擴充功能與更新
  2. 點擊位於左下角的變更您的[擴充功能和更新]的設定”按鈕

 1

  1. 點擊位於其他擴充組件庫旁的加入按鈕

2

 

於名稱的文字方塊中,填入任何你想取的名字,然後在連結的文字方塊中,輸入以下URLhttps://dotnet.myget.org/F/fsharp/vsix

3

  1. 點擊 套用按鈕
  2. 點擊 確定按鈕

根據您電腦的組態,或許需要一小段時間讓 Visual Studio 更新組件庫來源;一旦完成後,即可前往 工具→擴充功能與更新” 視窗,會有一提醒通知 Visual F# Tools 有可用更新!

 

手動安裝每日編譯版本 VSIX

假如您不想將 Visual Studio 的更新來源設為每日編譯版本,您還是可以透過手動安裝 VSIX 方式來取得每日編譯版本;您可以透過此方式來選擇性使用每日編譯版本。

  1. 前往:https://dotnet.myget.org/feed/fsharp/package/vsix/VisualFSharp
  2. 下載最新的 VSIX (或是任何你想要的版本)
  3. 下載完成後,透過雙擊的方式開啟安裝;您必須關閉 Visual Studio 來進行安裝

當您的程式碼於之前的每日編譯版本中運行正常,而在最新的每日編譯版本中遇到問題時,此種方式是一個很好的解決方法。

 

解除安裝每日編譯版本並回復至穩定版本

假如您希望可以回復到穩定版本,最簡單的方式是透過 Visual Studio Developer Command Prompt,您可以透過在開始視窗搜尋 ” Visual Studio Developer Command Prompt ” 開啟,然後執行以下指令

 

VSIXInstaller.exe /u:VisualFSharp

 

這將解除安裝每日編譯版本,並自動回復到您所安裝的 Visual F# Tools 最新穩定版本。我們非常高興能夠有對 Visual F# Tools 每日編譯版本,我們鼓勵您去嘗試並將使用後的心得與建議回饋給我們,尤其是針對新功能的部分。

您可以透過 Visual F# Github repository 來追蹤我們針對功能、Bug 與改進的進度。

 謝謝

 Visual F# 團隊

 

(原文出處:Announcing Nightly Releases for the Visual F# Tools)


🌟 更多最新文章及資訊 >> MSDN 台灣粉絲專頁 MSDN 台灣部落格

🌟 更多熱門課程影片 >> Channel 9 免費課程平台

Visual Studio 2017 全面支援 Python 開發環境

$
0
0

  今天是 Visual Studio 2017 的正式發行日, 你可以透過網站 ( launch.visualstudio.com ) 看到相關訊息以及加入即時活動。除了 Visual Studio 2017 發行的這個大新聞之外,我們同時也要宣佈一個有趣的訊息。

  對於喜歡使用最新軟體的開發者來說,當 Visual Studio 預覽的版本被確定之後就較少在更新這件事,是令人感到沮喪的。因為大家都知道的,一旦軟體正式發佈之後,更新就不會這麼頻繁了。而在 Visual Studio 2017,我們將安裝的使用體驗視為最重要的改善,新增了某些特定開發環境的使用情境,讓許多產品服務透過更簡單的方式提供給大家。這也代表著,未來將會看到更多更新頻繁的軟體版本,並且比過去能提供給更廣泛的開發者,以及更專注於某些開發情境的使用。我們也會提供早期試用者 ( early adopters ) 比其他使用者搶先使用到一些新功能。

 

Visual Studio 2017 和 Visual Studio Preview 相關介紹

brandvisualstudioide2017rc_40x  除了 Visual Studio 2017 之外,我們也同時發布 Visual Studio Preview。其中包含我們截至目前最新釋出的一些功能,也就是下一個版本的 Visual Studio 的提早預覽版。讓你可以在正式、穩定版本發佈前的幾週就搶先使用到最新、最棒的改善服務。

  在過去,如果你想要安裝 Visual Studio 的預覽版本,會需要安裝在兩台不同的機器上。不過現在 Visual Studio 2017,我們讓大家能夠同時安裝正式版以及預覽版在同一台電腦上。而當預覽版本的安裝不能使用的時候,正式版仍然能提供給你需要的功能,而且你可以在同一台電腦上面同時開啟兩個版本。

  簡單來說,如果你已經安裝 Visual Studio 2017,這個方式將會再幫你安裝另一個 Visual Studio,你將會有兩個不同的開發環境、設定,這些都可以透過同樣的 Visual Studio 安裝設定完成。所有你在 Visual Studio 2017 可以使用的功能,在 Visual Studio Preview 都能夠使用,所以唯一會需要兩個版本共存的使用情境就是你會需要客服功能的時候,這部分可以點產品頁瞭解更多。

 

為何透過這個部落格發佈?

  你也許會想說,為什麼我們在 python 的部落格發布 Visual Studio Preview 的消息,而不是在 Visual Studio 主要發布的部落格。主要原因就是因為:在 Visual Studio Preview 版本裡,我們首度加入了 Python 的開發環境。

  這些功能和過去你在 “ Python 開發工具 “ ( Visual Studio Python Tools ) 使用的功能都相同,不過現在放進 Visual Studio 2017 的是更新更全面的版本。現在就讓我們來看一些比較主要的更新,我們也將會在未來幾週釋出更多更新也更深入的消息。  

 

安裝

  當在安裝程序當中加入支援 Python 的開發環境之後,我們就可以透過安裝程序當中方便使用的部分。比如在下圖當中,你可以看到 Python 開發環境這個選項已被選取,而一系列相關的選項也變成可選取的狀態。這些選項除了推薦的 Visual Studio 功能之外,還有官方認為對開啊者可能有所幫助的第三方套件。

  首先你會看到一系列的Python版本可供選取,同樣的 Continuum Analytics (基于 Python 的數據解决方案提供商)在 Anaconda 也有相對應的支援。這些都是從外部網站直接連結的,因此你能夠過 Visual Studio 享有和原網站安裝相同的功能,只不過我們透過簡易的選取框來呈現。

  “ Python開發工具 “ ( Visual Studio Python Tools ) 其實是 Visual Studio 的正規 C++工具和編譯器,不過我們在這邊談的會專注在 Python 3.5 或是更新的版本,如果想瞭解先前版本的部分請看先前的文章。

  我們將會在以下討論 Cookiecutter 的範本支援,以及其他在 Visual Studio 當中專為 Azure 或者 Windows IOT Core 所使用的功能。你將會知道你是否會需要這些功能。

  (其他補充:如果你已經安裝了 Python 3.6 的版本,必須在安裝時取消勾選此選取框,否則在移除 Visual Studio 的時候,也會同時移除 Python。)

 

互動式視窗

interactive-300x185由於大部份的使用者花了許多時間在使用互動視窗上,所以我們在這版本做了一些改善,讓互動視窗的功能更加強大。未來在部落格會有關於更新的更多詳盡介紹,現在可以先看一下相關的摘要:

#你可以使用 ctrl 和 enter 鍵,將訊息在編輯區內送至互動區

#你可以用 #%% 將程式碼標記,並將他們一次送出

#你可以新增數個你所需要的互動視窗,並在其中依需求選擇不同的 Python 環境。

 

Cookiecutter

  當你安裝好 Cookiecutter 的模板支援,你將會在 “ 檔案 ” 下方,新增專案和新增項目目錄列表看到新的選項,這些將會打開 Cookiecutter 的探索視窗。透過這個功能會幫助你搜尋跟使用線上的範本。你還不太熟悉 Cookiecutter 嗎?可以點選我們之前的文章來瞭解更多。

 

Azure

azureitemtemplates-300x171針對 Visual Studio 2017,我們將更全面的支援 Python 專案的新增以及在 Azure 上的部署。在早些版本,我們提供較簡要的功能讓一切能快速上手,但後來我們聽到一些使用者回饋,說希望我們能更完善的支援維護複查度較高的網站使用。

我們預期這過程會花一些時間,也期待你們能加入我們,協助讓產品在對的方向上。以下是目前從舊版更新的新功能:

 

#推薦使用 Azure 應用程式網站擴充功能

#我們現在使用的 Python Nuget 套件的模板語法在 Azure 雲端服務使用。

#部署指令現在也變成簡易複製即可,現在我們也已經新增新模板來協助你能夠管理你的網站設定 ( web configuration )。

(在這部分我們仍然有一個已知的問題,你應該在安裝的時候選擇 “ Azure 雲端服務核心元件 ” 以取得完整的 Azure 支援,關於這部分我們將會盡快修復此問題。)

 

我們未來的計畫是什麼?

  Visual Studio Preview 現在仍是預覽階段,所以你可以預期在未來幾個月 Visual Studio 新版本發佈時,支援所有功能的狀況,包含 Python 開發環境 ( 資料科學開發環境 )。到時候你可以選擇移除 Visual Studio 預覽版本,或是留著,繼續使用下一階段最新的預覽更新。

  我們將會持續不斷的開發 Python 的支援,且和以往一樣,我們所有的開發狀況都會更新在 Github 上,所以如果你想要讓我們知道對你來說最重要的功能、需求,請到 Github 上面發 Issue 讓我們知道,我們同時也歡迎大家提供程式或者文獻上的貢獻。

 

(原文出處:Released: Python support in Visual Studio 2017


🌟 更多最新文章及資訊 >> MSDN 台灣粉絲專頁 MSDN 台灣部落格

🌟 更多熱門課程影片 >> Channel 9 免費課程平台

【Build 2017】更多平台、更多選擇、更加強大的 Visual Studio Mobile Center

$
0
0

去年秋天,我們推出了 Visual Studio Mobile Center(預覽版),這是一項雲端服務,旨在幫助開發人員管理 App 的生命週期,並以更快的速度發佈更高品質的 App。今天,我們要宣布一些更振奮人心的升級:我們不但加強了服務的功能,並且還將 Mobile Center 擴及新的群眾和平台。

重點新功能

Windows 新功能支援

起初我們設計了 Mobile Center,就是想幫助所有應用程式開發人員更快地構建和運送更高品質的 App。我們希望每個平台上的每位開發人員都成為一流的工程師。在今早 (台灣時間 5/10 晚上 10 點) 的 Microsoft Build 2017 中,我們已經為 iOS Android 添加了對 Windows 應用程式的支援。從今天開始,通用 Windows 平台(UWP)的開發人員可以存取 Mobile Center 的建置、發佈、分析和全新的推送服務,而當機及測試服務將在後半年推出。

 

全新的推送服務

對於一個強大的 CI / CD 管道,能快速、可靠地提供軟體是重要的關鍵。Mobile Center 構建、測試和分發服務旨在使其成為每個開發人員工作流程的一部分。我們的當機報告和分析服務可確保您了解每個版本的品質和使用情況,然而我們從開發人員那裡得知他們最常見的需求是:可以使用 Mobile Center 分析數據來推送訊息,以確保正確的最終用戶能即時收到通知。這加強了與終端用戶從他們一開始登入到後來表現出積極參與度的連結。

 

透過我們新的推送服務,Mobile Center 開發人員可以在正確的時機向特定的用戶組發送有特定的訊息。客戶可以根據十幾種不同的屬性(包括裝置、語言、設備型號、螢幕尺寸和時區)來創建劃分,甚至還有更多其他的功能。如果您想嘗試新的推送服務,請透過我們 App 的內部支援與我們聯繫。

 

VSTS 及 Bitbucket 整合

我們是 GitHub 的超級愛用者,所以它成為我們去年 11 月推出 Mobile Center 建置服務的首選。儘管如此,我們也相信靈活性和選擇性,所以今天我們很自豪地發佈 Visual Studio Team Services Bitbucket git 套件庫支援。所有的套件庫和服務都具有相同的功能,包括我們強大的內建推送功能和全新的啟動測試。

 

全新測試框架:XCUITest 和 Espresso

有些使用預覽版的客戶告訴我們他們很喜歡我們的測試服務,但是他們想在更熟悉的特定平台框架中編寫測試。於是我們採納了他們的意見,我們現在支援 XCUITest EspressoiOS Android 的原生測試框架。現在,開發人員可以使用自己的語言撰寫他們的自動化 UI 測試,並將現有測試移植到 Mobile Center 測試。

 

佈署到 App 商店

自從預覽版第一次發佈以來,Mobile Center提供了一個強大的 beta 測試發佈服務,將成功的構建自動發送給測試人員。開發人員表示,他們會喜歡這種相同的機制,讓他們將應用程式部署到 App 商店和公司門戶。

 

透過我們針對發佈服務新增的功能,只要開發人員對於他們的 App 品質有信心,他們可以將最新版本直接推廣到 App 商店或公司門戶。如今,您已經可以使用 Google Play 進行此項操作,我們也將盡快連結到 IntuneApp Store 以及 Windows Store

 

HockeyApp 與 Mobile Center

Mobile Center將是下一代的 HockeyApp。 從今天開始,我們推出了針對 HockeyApp 用戶過渡計劃的第一步:使用 Mobile Center  HockeyApp 的現有 App,分析當機報告和分析數據,並連接到構建、測試和推送服務。

目前在 HockeyApp Mobile Center共同存有 App、公司、協作者和測試人員,因此開發人員可以在 HockeyApp 應用程式中使用行動中心的新服務,而不影響 HockeyApp 的使用體驗。在 HockeyApp 所做的更新也會在Mobile Center更新,以確保一致性,並將來自 HockeySDK 傳入的 App 數據一併傳輸到 Mobile Center

 

我們也將在不久之後對 HockeyApp 用戶推出此功能,當我們準備將其擴展到 App 時,開發人員屆時會收到 Email 通知。

 

我們的下一步

全新的行動平台、測試框架、推送服務和套件庫支援只是個開始我們還會推出更多功能及服務。 App 商店及安全私人入口網站的部署將在未來幾個月內推出,同時還將增加 UWP 支援,就如同 HockeyApp 和雲端測試服務,以及全新的雲端開發服務。現在就開始註冊吧!

 

Keith Ballinger – 行動開發人員雲端服務專案管理師 @KeithBa

Keith 先前是微軟在 2016 3 月收購的 Xamarin 產品副總裁。Keith在創業、工程和產品管理方面皆具有強大的背景,亦在他原先的 .NET 團隊中擔任產品經理。 2007 Keith 離開了微軟,成立了初創公司,也共同創立了幾家手機初創公司。 2012年,他帶領團隊創建了 SmartPay,為一款行動支付應用程式,每年處理超過 10 億美元的交易量。 在 Xamarin 之前,Keith YC 資助的初創公司 – Standard Treasury 的首席架構師,建立了 API 優先的銀行。 他亦是兩本關於編程的書籍作者,「.NET Web Service: Architecture and Implementation」以及「Special Edition: Using ASP」的合著者。

 

本文翻譯自 More Platforms, More Choices, More Power: Visual Studio Mobile Center at Build


Visual Studio for Mac:現在全面上市!

$
0
0

2017 年 5 10 日我們在微軟 Build 大會中宣布,Visual Studio for Mac 2017 正式版開放。

Visual Studio for Mac 2017 是替 Mac 系統原生打造的全功能 IDE,可用於開發,調適和測試應用程式甚至是遊戲。讓同時擁有 PC Mac 的開發團隊可以倚賴一致的解決方案與專案,完美共用程式碼。所有 IDE 提供的都是為 Mac 原生打造,讓所有 Mac 使用者能夠輕易的上手Visual Studio

開發行動、網頁、雲端和遊戲應用

行動開發透過 C# .NET

Visual Studio for Mac 除了提供 Xamarin 行動開發極佳的使用體驗,從整合設計、程式碼撰寫、到打包及發佈應用程式之外,還提供以下輔助:

  • 數以百萬計的工程師喜愛的 C# 7
  • 完整的 .NET API 百分之百涵蓋了 Android, iOS, tvOS, watchOS macOS 開發 API
  • Forms API 的概念最大化共享程式碼
  • 可以取得 Nuget.org 上成千上萬的 .NET 程式庫以加速您的行動開發
  • 透過 LLVM 優化編譯器,高度優化原生程式碼

 

使用 ASP.NET Core 和 Azure 進行網站開發

自從我們在去年11月首次發布 Visual Studio for Mac 的預覽之後,我們便一直致力於將 Windows Visual Studio 的網站編輯工具移植到 Mac 版上。這次的最新版本,您將可獲得完整的 ASP.NET Core 和 HTML5CSS3JavaScript 等前端語言支援,以建立網站為主的應用程式。

當您的網頁應用已完美優化並且即將發行時,您不需要離開 IDE 即可使用最新的 Publish to Azure 工具直接發行到 Azure 上。

使用 Unity 開發遊戲

Build 的最新消息,Visual Studio for Mac 幫助您透過 C#, .NET 和 Unity 開發遊戲應用。

搭配 Unity 5.6.1 使用,您將可以在 IDE 中建置和偵錯遊戲應用,包含以下:

  • 支援專案,輕鬆瀏覽和搜尋您的腳本
  • 從遊戲引擎可自動完成方法調用
  • 依附於 Unity 編輯器的一鍵除錯功能

 

Mac  PC 之間無縫地工作

Mac 版 Visual Studio 幫助您與團隊的其他人協同合作,無論他們使用的是 Mac 還是 PC。解決方案和專案在 Mac 版或 Windows Visual Studio 中都可運作,讓來自不同的開發團隊輕鬆的跨越作業系統,在同個專案上一起合作。這也代表您可以輕易的在不同機器間來回,而不會損失效率。

 

為 Mac 量身打造

Visual Studio for Mac 是一個專為 Mac 打造的全新 IDE 體驗,並不是直接從 Windows 版的 Visual Studio 移植而來。這意味著 UI 體驗上就跟您使用其他的 MacOS 應用一樣。不僅是基本元素像是按鈕、文字呈現方式和圖示。我們還將開發人員的工作流程優化成 Mac 開發人員所期望的,讓他們沒有任何違和感,以減少花費心力在適應上。

 

搶先預覽即將釋出的新功能

這次的發表只是個開始,所以今天我們也聊聊預覽中的超棒新功能,並且會盡快提供於Alpha 頻道上。以下是沒有被列在 Stable 版本中的預覽功能,還期待您試用並給予我們回饋:

  • 支援 Docker:支援在 Docker 容器中部署和偵錯 .NET Core 和 ASP.NET Core
  • 支援 Azure Functions:在您的Mac上開發、偵錯和部署 Azure Functions
  • IoT 裝置為目標:使用 C# 程式碼和 Xamarin 開發 IoT 裝置(像是 Android Things) 適用的應用。

想要嘗試這些預覽功能,您可以訂閱 Mac 版 Visual Studio 中的 Alpha 頻道

 

試試看吧!並且讓我們知道您的想法

如果您已經安裝了 Visual Studio for Mac 的預覽版,請先確保您已更新到最新版本。如果您還沒安裝過預覽版,快前往 VisualStudio.com 下載最新釋出的版本。想知道更多有關於這次發表的內容,可以到 release notes 查看。

我們對這次的發表感到非常驕傲,同時也想知道您的看法——拜託!告訴我們您的回饋。您可以使用 Visual Studio for Mac 版本中的 Report a Problem 或是 “Provide a Suggestion” ( Help menu ) 給予我們回饋。或者加入Visual Studio Mac 版本社群論壇中的對話。

 

快試試看吧!

 

Miguel

 

本文翻譯自  Visual Studio for Mac: now generally available

Viewing all 136 articles
Browse latest View live


<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>