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

Visual Studio “15” Preview 3 與 Team Foundation Server “15” Preview 發佈囉!

$
0
0

今天很高興可以分享 Visual Studio “15” Preview 3(與 Visual Studio 2015 Update 3 不同)。這還只是一個 Preview 版本,尚未被支援,所以建議您先不要安裝在您的生產環境。這也就是說,它應該安裝在任何先前的 Visual Studio “15” Preview 版本上,並與先前的 Visual Studio 版本並排。這裡是 Visual Studio “15” Preview 3 版本資訊Visual Studio “15” Preview 3 已知問題

 

我們還在著手進行一些基礎性的工程,但我們是有一些新的功能,其中包含一些 IntelliSense 的改進,讓您能根據類型來篩選用戶名單,還有一個新的 Exception 小幫手,給您對於內部例外狀況即時的 non-modal view。IntelliSense 工具列初始設定是關閉的,但可以在 Tools > Options > Text Editor > C#/VB > IntelliSense 中開啟。Preview 3 也包含了 Xamarin 4.1,其中包含修復錯誤與支援 tvOS,改進 iOS Assets Catalog 的支援。想取得更多資訊,可以查看 Xamarin 版本資訊

 

 

VSpre3

 

我們今天還發佈了第一個 Team Foundation Server “15” 的 Preview 版本,也是我們下一個主要的 TFS 版本。這個版本是沒有上線的,意思是它並沒有被授權能被安裝在生產系統上。升級這個版本到未來的版本將會被阻擋而且不被支援。

 

我們很期望您可以試試這個版本。您可以在版本資訊已知問題中取得更多有關新功能的資訊。您也可以透過建立帳號,在 Team Services 體驗更多功能。

 

這個版本目前只有英文版。您可以透過下面的連結下載:

 

同時,我們也在著手進行回饋系統的升級。您可以試試 IDE 中 Report a Problem 的功能,來看看我們做了些什麼改變,然後查看入口網站的畫面。

 

一如往常,我們非常歡迎您給予我們回饋。透過 Visual Studio 中 Report a Problem 的選項來讓我們知道您的問題。至於有任何建議可以透過 UserVoice 來讓我們知道。

 

本文翻譯自 Visual Studio “15” Preview 3 Team Foundation Server “15” Preview Released


 

TFS2015 VS

 

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922


Tuple Tuesday!

$
0
0

在不久的將來,我們試圖將 Tuple 作為一項核心功能加入到 VB 和 C# 中。如果您還沒有聽說 Tuple,那可以將它理解為是一種把多種值組合在一起的基礎資料結構。像 .NET 裡面的 F#, 有許多編程語言已支持它多年,然而在 Visual Basic 中不支援確實有些奇怪了。Tuple 就像陣列一樣,它是一個捆綁了多個值作為一個單元,而陣列中每個元素都是相同的類型,但在 Tuple 中每個元素可以有不同的類型。所以,如果我發現在我的程序中,我總是需要同時傳兩個值,那麼我就可以把它們組合成一個 Tuple:

 

不使用 Tuple 的情況:

Sub Method1(x As Integer, y As Integer)
    ‘ Do something.
    Method2(x, y)
End Sub

Sub Method2(x As Integer, y As Integer)
    ‘ Do other stuff.
End Sub

 

使用 Tuple 的情況:

Sub Method1(point As Tuple(Of Integer, Integer))
    ‘ Do something.
    Method2(point)
End SubSub Method2(point As (Integer, Integer))
    ‘ Do other stuff.
End Sub

 

在上面的例子中,我們可以用包含 2 個整數的 Tuple 作為方法的參數,而不是在方法之間單獨傳遞兩個整數參數。這樣能使我們更加清楚的知道這些值被作為一個單元來處理。在本例中我使用了存在於 .NET 4.0 及以上版本裡的通用 Tuple 類型 System.Tuple(of T1,T2)。您今天也可以這樣使用,只是有兩個缺點。第一,System.Tuple(of T1,T2)以及和它關聯的類型都是類別,因此每次您創建一個 Tuple(of T1,T2)類型,它都會在堆上分配的一個新的對象。在VB和C#中,我們正在考慮使用一套新的值類型的 Tuple 類型,如 ValueType(Of T1, T2)分配內聯地址,這樣更方便於使用元組。第二,在收到大量關於 Tuple 名稱有多重要的客戶回饋後,內置 VB(和 C#)Tuple 將具有名稱:

 

Sub Method1(point As (X As Integer, Y As Integer))
    ‘ Do something.
    Console.WriteLine($”X={point.X}, Y={point.Y})
End Sub

 

這意味著您將擁有所有宣告自己結構但帶有輕量語法的自文檔化名稱。這有點類似於 VB 裡的匿名類型,同時可以在方法外傳值。這使得 VB Tuple 具有了像 F# 語言中 Tuple 和記錄的所有特點。我們覺得這簡直太完美了。

儘管簡潔,但僅僅一起傳遞多個數據並不會太有吸引力,對於 Tuple 最耀眼的部分是回傳多個值。如果沒有 Tuple 您需要寫這樣一種方法,將兩個數相除並回傳商和餘數:

 

”’ <Summary>Divides two integers and returns the quotient and remainder.</Summary>
Function DivRem(dividend As Integer, divisor As Integer, ByRef remainder As Integer) As Integer
    remainder = dividend Mod divisor
    Return dividend \ divisor
End Function

 

因為 VB 函數總是精確的回傳一個值,如果您想要回傳額外的值就需要在調用方法中傳遞 ByRef 變數。或者,您自己可以在您的程式碼中宣告 QuotientAndRemainder 結構,但老實說又有誰想要在自己的項目中,為了一個回傳值,創建一個名字有些滑稽的方法類型呢?如果有了 Tuple,您就不需要考量這些:

 

”’ <Summary>Divides two integers and returns the quotient and remainder.</Summary>
Function DivRem(dividend As Integer, divisor As Integer) As (divisor As Integer, remainder As Integer)
    Return (dividend \ divisor, dividend Mod divisor)
End Function

 

作為一種語言,它的目標是可讀的和易理解的,我認為這是到目前為止最簡單和最直接的方式去從一個函數回傳多個值。我們認為 Tuple 的使用,極大地方便了在專案裡傳遞和回傳多個值。當使用強大的非同步功能時,這個優勢更加突出,因為在非同步函數中您甚至不能有 ByRef 參數。今天您將需要宣告一個特殊的結構,或使用陣列(如果所有的值都具有相同的類型),或者使用 Tuple 類型卻丟掉有意義的名稱。使用 Tuple,您可以擁有所有的方便之處。

 

”’ <Summary>Asynchronously enumerates all orders in the database for the month and calculates the total value of the orders, the average order value, and total number of orders.</Summary>
Async Function CalculateMonthlyTotalsAsync() As Task(Of (total As Decimal, average As Decimal, count As Integer))

 

此方法透過網絡從數據庫中提取一些數據,所以它應該是非同步的並且遍歷所有的訂單來計算有用的統計資訊,如所有訂單的總值,平均訂單數和訂單的數量。如果沒有 Tuple 您將不得不在您的項目中添加一個非常討厭的 TotalAverageAndCount 類型。

目前,關於在 Visual Basic 中 Tuple 的完整設計策略,可以透過閱讀 design notes on GitHub 來了解,包括用一些其他方式將 Tuple 集成到其它語言中。請在 GitHub 中留下關於 Tuple 功能設計上的回饋或者在下面進行評論。

上週,我絞盡腦汁地想提出一個好的雙關語來介紹 Tuple,導致這篇文章會比原計劃晚了一周。 「Tuple Tuesday」算是一個較好的選擇吧!為了避免混淆,VB 語言設計團隊為正在添加的那些功能積極集思廣益出了許多雙關語。我認為下一個設計主題將是「Visual Basic and Patterns – A Match Made In Heaven!」 (我認為這將給 VB 添加一個全新的維度)-敬請期待。在此之前,依舊快樂 coding 吧!

 

Regard,

ADG

 

本文翻譯自 Tuple Tuesday!


 

Capture 1 Capture

 

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

TypeScript 2.0 Beta版 - 強大功能釋出!

$
0
0

今天我們很高興能告訴您 TypeScript 2.0 的 beta 版釋出了!如果您還對 TypeScript 不熟悉的話,您今天就可以開始在我們的網站上學習。

要怎麼取得 beta 版呢?您可以下載 TypeScript 2.0 Beta for Visual Studio 2015(需要 VS 2015 Update 3),或直接執行

npm install -g typescript@beta

這個版本包含了很多新的功能,就像是我們對於 .d .ts 檔案新的工作流程,以下我們就來看看有哪些新功能吧!

 

不可為 null 的類型

nullundefined 是兩個在 JavaScript 中最常見的錯誤來源。在沒有 TypeScript 2.0 之前,nullundefined 是存在於每一種類型,意思是說如果您有一個函式要取得一個 string,您不能光從類型確定您實際上取得的是 string 還是 null

在 TypeScript 2.0 中,新的 --strictNullChecks 旗標改成讓 string 就是指 string,而 number 就是指 number

let foo: string = null; // Error!

那如果您想要讓某個東西可以是 null 呢?我們有兩種新的類型來面對這種情況:nullundefined。就如同您所想像的,null 就只能包含 null,而 undefined 只能包含 undefined。雖然它們本身並不怎麼實用,但是您可以用一個聯集類型來使用它們,描述有些東西可以是 null/undefined

let foo: string | null = null; // Okay!

因為通常您可能比類型系統還了解情況,所以我們也引進了一個後置的 ! 運算子,讓 nullundefined 從類型中排除掉。

declare let strs: string[] | undefined;

// Error! 'strs' is possibly undefined.
let upperCased = strs.map(s => s.toUpperCase());

// 'strs!' means we're sure it can't be 'undefined', so we can call 'map' on it.
let lowerCased = strs!.map(s => s.toLowerCase());

 

類型的控制流程分析

TypeScript 能夠支援處理可為 null 的類型,是多虧了程式中類型被追蹤方式的改變。在 2.0 版本中,我們開始使用控制流程分析,來知道某個位置是什麼類型。

/**
 * @param recipients  An array of recipients, or a comma-separated list of recipients.
 * @param body        Primary content of the message.
 */
function sendMessage(recipients: string | string[], body: string) {
    if (typeof recipients === "string") {
        recipients = recipients.split(",");
    }

    // TypeScript knows that 'recipients' is a 'string[]' here.
    recipients = recipients.filter(isValidAddress);
    for (let r of recipients) {
        // ...
    }
}

請注意,在經過 if 的區塊之後,TypeScript 就知道它必須處理一個 string 的陣列。這樣就可以在早期發現問題,並節省您 debug 的時間。

let bestItem: Item;
for (let item of items) {
    if (item.id === 42) bestItem = item;
}

// Error! 'bestItem' might not have been initialized if 'items' was empty.
let itemName = bestItem.name;

我們欠 Ivo Gabe de Wolff 一個很大的感謝,他對於這個功能的貢獻與實作,是從他的論文開始的,也成為了 TypeScript 的一部份。

 

更簡單的模組宣告

有時候您只想要告訴 TypeScript 有一個模組,但並不在乎它長得怎樣。您可能有寫過類似下面這樣的東西:

declare module "foo" {
    var x: any;
    export = x;
}

但這還蠻麻煩的,所以我們讓它更容易一點,並擺脫了樣板。在 TypeScript 2.0 您可以只要寫:

declare module "foo";
declare module "bar";

當您準備好要勾勒出模組的樣子,可以回到這些宣告並定義您所需要的結構。
那如果您需要一個套件包含很多模組呢?一個個模組寫出來太麻煩了,TypeScript 2.0 讓這件事變得很簡單,只需要使用萬用字元在這些宣告就好了!

declare module "foo/*";

現在您可以匯入任何路徑,只要開頭是 foo/ TypeScript 都會假設它存在。您可以利用這點,如果您的模組加載器也了解如何根據某些格式匯入。例如:

declare module "*!text" {
    const content: string;
    export = content;
}

現在只要您匯入一個結尾是 !text 的路徑,TypeScript 就會了解這個匯入的類型是 string

import text = require("./hello.txt!text");
text.toLowerCase();

 

下一步

您可能會想知道的一個功能是,在 ES3 和 ES5 中 async 函式的支援。本來這個功能有在 2.0 的版本被提名,可是要合理地實作 async/await,我們需要重寫 TypeScript 的 emitter 作為一系列樹的轉換。這樣做同時要維持 TypeScript 的快速,需要很多工作與對於細節的注意。雖然我們對於今天的實作有信心,但是自信是比不上徹底的測試,而且需要更多時間來讓 async/await 穩定。您可以在 TypeScript 2.1 中期待這個功能,如果您想要追蹤我們的進度,目前在 GitHub 有開放提取要求

TypeScript 2.0 還是包含了很多有用的新功能,而我們也將會持續推出更多細節。如果您很好奇有哪些新功能,您可以看一下我們的 wiki。在未來的幾週,更穩定的版本也將會釋出,而離最終產品也不遠了囉!

我們很樂意聽到任何您的意見與回饋,無論是在下面的評論或是在 GitHub 上。Happy hacking!

 

本文翻譯自 Announcing TypeScript 2.0 Beta


 

VS     typescript

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

「突破隔閡的高牆」了解DevOps 的基本概念

$
0
0

devops-1

在傳統的開發週期,開發團隊會將軟體版本丟過這道牆給營運團隊,營運團隊撿起這些版本構件並開始準備他們的部署,手動處理開發者提供或是他們自己建立的部署指令碼。他們也編輯配置檔案來反映生產環境,而這與開發或 QA 環境有極大的不同。最好的情況是他們正在複製之前環境中已經做好的工作,最壞的情況是他們即將引進或發現新的錯誤。

再來,IT 營運團隊就會著手於他們認為目前正確的部署程序,但由於開發與營運團隊的指令碼、設定、程序與環境不同,這基本上是第一次被運行。當然如果過程中遇到問題的話,開發者會被叫來幫忙解決問題。營運團隊會覺得是開發團隊給他們錯誤的程式碼,而開發者則會反駁,在他們的環境中執行並沒有問題,所以一定是營運團隊有哪裡做錯了。開發者會非常難察覺問題所在,因為導致這樣結果的設定、檔案位置與程序都跟他們想像的不同。時間就這樣流逝在不停切換畫面上,當然也沒有牢靠的方法讓環境恢復到之前那個好的狀態。本來應該平靜無事的部署,演變成全員出動的消防演習,面對一大堆考驗與錯誤,最後才讓生產環境變成一個可以使用的狀態。

 

DevOps

如果您沒辦法快速地傳遞高品質的軟體或建構錯誤的東西來開始,以下是實際的後果數據:

40% 的 IT 實作最後都重做,因為它們並不符合使用者原本的需求。

一個客戶導向的應用程式停機一小時的平均成本是每小時 USD $100 元,而且還不考慮受損的聲譽,可能會更嚴重。

修復像這樣生產上的問題平均每個事件要花上 200 分鐘。

有四分之三的開發團隊採用敏捷開發,使他們開發得更快。雖然這比例很大,但是如果因為 IT 營運團隊是不敏捷的,使採用敏捷開發的開發團隊在部署上還是得花數星期或數個月,這一點幫助都沒有。

這只是三個非常高階的例子,但所有的數據都指向同一個結論 - 這不僅僅只是個小挫折或輕微的延遲而已。開發與營運團隊缺乏合作會對公司的盈虧與成功造成嚴重的影響。

devops-2

人=文化

人/員工是一個組織文化的成敗關鍵元素。試圖改變文化,需要時間,改變文化也不例外,您不可能光靠一個人完成,表揚令人信服的事件:停機時間、雲技術導入、DevOps 熱潮。

devops-3

 

一些初始的問題?

有一個共同的使命與動機:基礎架構程式化、應用程式即服務、DevOps/皆為團隊。

將硬體視為商品,而伺服器就像是農場動物。

打造深度檢測到服務中,複雜度向上推進

圍繞在敏捷周圍、共同的標準、持續整合 CI、服務負責人隨時 on call 等。

程序-定義與設計、一致性、持續改善

-責任、管理、技術開發、訓練

產品-工具和基礎設備

實作像是 ITIL

  • Infrastructure as Code(IaC)
    devops-4
  • 持續整合
    devops-5
  • 持續傳遞
    devops-6
  • 持續部署
    devops-7
  • 自動測試
  • 發行管理
  • 應用程式效能監控
  • 負載測試 & 自動比例
  • 可用性監控
  • 變更/配置管理
  • 功能旗標
  • 自動環境解除佈建
  • 自助環境
  • 自動復原(復原 & 向前復原)
  • 假說驗證開發
  • 生產中測試
  • 錯誤注射
  • 使用量監控/使用者遙測

 

實施辦法

有很多可用的工具與技術來讓我們能夠實踐 DevOps

devops-8

Microsoft 也在開源的生態系統投資了很多,並能讓您保持在開源工具現有的投資,同時有可能與我們自己的技術整合。在下面的異質環境您可以看到我們許多不同有互通性的開源產品,他們扮演不同的角色在整個應用程式生命週期。

devops-9

這些開源工具往往不只在產品生命週期的單一方面發會作用,但它們被列在這裡是基於與微軟技術主要的整合點。

最後,我想指出的是,Microsoft Azure 平台,您可能會決定裝載您的應用程式支援各種程式語言,像是 Node.js、php、Java 以及開源的作業系統 Linux。

您可以到這裡查看更多有關 DevOps 專案的內容。

 

使用 Azure 作為基礎

devops-10

當提到雲端,在產業中有許多混淆。您瞭解產業內發生了什麼與我們如何思考雲端是很重要的。

這是最常用來區分雲端服務類型的分類:

devops-11

產業定義了三個服務的類別:

  • 提供基礎架構的雲端服務(IaaS)- 基礎建設等級的功能,像是提供作業系統、網路連線等付費使用的服務,並可以用來裝載應用程式。
  • 平台即服務(PaaS)- 較高等級的功能,為要建置應用程式開發者的耗材服務。PaaS 提供開發者一個開發平台,使其能夠使應用程式快速被組成。
  • 軟體即服務(SaaS)- 被使用服務交付模型交付的應用程式,組織可以簡單地消費與使用應用程式。通常一個組織會付費使用應用程式或應用程式可以透過廣告收入賺錢。

要注意的是這三種類型的服務是可以獨立存在或彼此組合。

 

內部部署或外部部署

devops-12

Microsoft Azure Stack 讓貴組織能夠在公有雲上做任何事透過新的 Azure 資源管理器 API 在 portal.azure.com,內部部署在他們自己的數據中心。所以不管您是否喜歡在雲端上工作,混合式或內部部署,微軟都已幫您顧及到了。

devops-13

如果您對於教導 DevOps 有興趣或是想要分享您的故事,請聯繫我們。

 

資源

Microsoft DevOps Factory

DevOps Github

Microsoft DevOps

Visual Studio

Getting Started with Visual Studio

Microsoft Channel9 線上學習與資源

Azure Grant for DevOps in the Curricula

 

本文翻譯自 DevOps the Wall of Confusion understanding the basics of DevOps


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

【嚴選 TechDays 2015】十大熱門開發影片

$
0
0
雖然今年 TechDays 暫停一次,但緊接而來的是台灣為首場舉行的 Tech Summit Roadshow ,
同樣綜合 Ignite + Build 的精華消息,還請大家拭目以待,現在讓我們一同回顧去年的 TechDays 的經典課程吧!
小編精選十大最佳開發課程,你心中的最佳影片得主是哪一部呢?或者是你認為哪一部影片是遺珠?歡迎留言與我們一同交流!


 

1. Microsoft Edge : 為您現代化網站準備好的全新瀏覽器

Microsoft Edge 是 Windows 10 所預設,横跨手機、平版、PC 甚至更多裝置上的全新瀏覽器。本課程將
帶您探究 Microsoft Edge 的全新功能、其背後引擎 (rendering engine) 之設計運作,同時將帶領大家如何
將您的網站設計成為 Modern Web Sites。

2. ASP.NET 5 開發攻略

ASP.NET 5 是一個跨平台的開放原始碼程式框架,在本課程中,除了介紹有關 ASP.NET 5 的最新資訊外,
也會介紹 ASP.NET 的跨平台特性,讓你的 ASP.NET 5 應用程式在不同作業系統之間也能順利運作,對身
為開發人員的你來說,必修課就在這!

欲看更多 ASP.Net 相關文章請點這裡

 

3. 敏捷企業決勝關鍵:DevOps 開發維運一體化

交付高品質與現代化的應用程式,需要有高效率的軟體生命週期機制與管理方法。在這個課程中,您將學
習到如何運用 Microsoft ALM 開發維運平台,提昇讓專案團隊能量,並更容易的整合開發維運團隊,達到
持續交付成品、反饋資料分析、有效提升團隊的產能,促使專案成功。

欲知更多相關文章,請點擊微軟開發部 DevOps 經驗談

 

4. 實現 End to End 的雲端敏捷開發流程

敏捷開發對實際專案有什麼幫助?從管理變更優先順序、增加產能、提升專案能見度、改善團隊士氣,到
提升軟體品質,在在凸顯了敏捷開發的重要性。本課程透過實際應用,帶您了解如何透管簡單的敏捷軟體
開發方法進行持續整合與佈署,來實踐 End to End 的雲端敏捷開發流程。

 

5. 開發運維一體化(DevOps)的敏捷九劍

微軟全球研發團隊的敏捷轉型已經是知名的成功案例之一,從盒裝軟體發展邁向雲計算服務運維的過程中,
微軟本身也掌握了寶貴的DevOps實踐經驗,這些來自於實戰的功能需求,許多革新性的功能,以Scrum的
敏捷式反覆運算運算開發方法為基礎,能夠快速幫助您推進軟體發展過程,從敏捷專案規劃、統一進行版本
管理、版本比較、進行各種測試與品質管制、自動化佈署與交付,推進到開發過程與運維階段的雙向管理,
落實軟體發展的生命週期管理,提高團隊協作效率,實現開發運維一體化,深化專案管理透明性與可預測性。

6. 深入 Apache Cordova 開發:進入跨平台行動應用之實務分享

講師將分享真實的 Apache Cordova 開發實務經驗,讓您了解真實世界中選擇跨平台技術之思維。您將
學習到如何以 HTML、CSS 及 JavaScript 等網頁開發技術,加上 Visual Studio 開發工具來進行跨平台
(Windows/iOS/Android) 之行動 Apps 開發,如何整合工具來進行除錯及驗證。最後將帶領大家如何
透過 Cordova Plugins 來實作行動設備原始功能,如相機、檔案系統或 Notification。

7. .NET Framework 技術架構發展與 C# 6.0

透過 C# 讓開發人員能建置各種可以在 .NET Framework 上執行的安全、強固應用程式。開發人員可以
使用 C# 來建立 Windows 用戶端應用程式、XML Web Services、分散式元件、主從式應用程式、資料庫
應用程式以及更多程式。本課程將帶您了解 .NET Framework 的技術架構發展、C# 6.0 有什麼新亮點,以及
如何完美結合 C# 及 .NET Framework 來開發應用程式。

8. 微軟跨足大數據的重磅武器 – R 語言

開源的 R 語言是近年來備受矚目的分析技術,在微軟宣布收購 Revolution Analytics 後,這意味者微軟
將與 R 語言將會有更密切的整合。不光是公有雲的 Azure ML 整合 R 語言,在未來的 SQL Server 2016
中也將整合 R 語言技術,在本課程中,我們將介紹許多 R 語言的大數據分析案例,以及說明它是如何與
微軟技術相互整合應用。

9. C#. 跨界 X 跨平台.Visual Studio & Xamarin 開發

在當今發展各項火紅的 IoT 及其應用服務時,團隊是不是常常忙於處理各種不同程式語言的專案開發,
而焦頭爛額無法順利進展呢?!在針對因應各家行動平台開發的 App 時,又面臨其開發語言的不同而讓
商業邏輯層的架構部分無法共享使用,必須讓團隊不斷的浪費時間重複的開發,不斷的延誤時程無法順利
交付專案呢?!讓本堂課引領各位體會透過 C# 在 Visual Studio & Xamarin 當中,如何展現跨界跨平
台×的開發的超強戰力,讓您的團隊面對各種應用開發時都能輕鬆寫意,戰力飆升,使命必達。

欲知更多相關文章,請點擊 跨平台行動開發 Xamarin

10. 程式設計師職場生存實戰技巧,提升加倍生產力

程式設計師如何在職場上戰無不勝?本課程將帶您了解 Git, Entity Framework 7、現代化網站開發工具
、CodeMap、程式碼分析、單元測試、C# 6、VB 14 如何加配提升您的生產力,讓您成為赤手可熱的企業愛將!

感謝各位的收看!預知更多 Channel 9 影音開發課程請點這裡,鎖定更多技術文章歡迎關注到 MSDN 粉絲團 

三緯國際力攻機器人市場,加速跨平台開發 以 Microsoft Xamarin 橫跨多重平台及開發團隊轉換程式,確保服務功能及效能一致性

$
0
0

對於未來科技的想像正在付諸實現,三緯國際以「XYZ robot」自有品牌行銷服務型機器人與教育娛樂型機器人,不僅在台灣嶄露頭角,並已打進美、日等地市場,商用化的速度和成熟度領先競爭對手。

HANS0012

機器人所提供的服務內容來自於後端複雜而精密的演算法,而在前端的人機介面則多以行動平台呈現。金寶電子選擇Microsoft Xamarin來銜接及轉換這兩個以不同程式語言構成的開發環境,讓兩個團隊能各司其職,又能加速服務的商品化。

由新金寶電集團轉投資成立,專攻3D列印與高階機器人的三緯國際立體列印科技公司專責機器人的研發工作,該公司的技術研發總管理處林傳凱襄理表示:「Microsoft Xamarin可以和目前所有使用中的開發工具無縫整合,無需花費額外的介接或整合心力,最重要的是,在關鍵的跨平台轉換功能及結果完全符合我們的期待與需求。」

 

機器人外銷有成,腳步領先

三緯國際的機器人團隊在前年開始啟動,去年正式成立專責部門。針對教育市場、鎖定中小學生的小型機器人已經在台灣、日本和美國市場銷售,可以自己撰寫程式來控制機器人,做出跳舞或打架的連續動作。值得一提的是,機器人所有的控制器、馬達和模具,全部都由三緯國際研發生產。

服務型機器人目前的應用場域則包括賣場、銀行、圖書館。以賣場為例,機器人的功能在於協銷,關鍵的自動導航功能可引導客戶購買商品,自由移動的機器人搭配機身的螢幕,還能定時到特定貨架做促銷,也可配合點閱率來向商品供應商收取廣告費,目前正與多家美國知名賣場洽談合作中。

應用於銀行的服務型機器人則著重在語音互動,像是根據來行客戶想要辦理的業務項目提供指引、發放號碼牌,以及資訊查詢如匯率、利率,也可以結合人臉辨識功能,從來行客戶裡辨認出銀行貴賓,自動將其導引至VIP櫃檯。

HANS0016

異質平台程式完整轉換,效能不減

從導航定位到人臉辨識,這些關鍵技術全由三緯國際的團隊一手開發,人力配置為200人,包含泰國與菲律賓。機器人開發團隊主要使用的程式語言是Windows平台的C#C++,前端使用介面則是採用Android平台,故須進行介接轉換,為了減輕轉換心力、加快轉換速度,三緯國際決定以尋找合適的工具方案進行因應。在評估產品的過程裡,透過昕力資訊的協助,三緯國際對Microsoft Xamarin進行了嚴格測試。首先,是由昕力的顧問負協助轉換程式碼,確定可以正確且無誤地轉換;其次,則是驗證程式轉換後的效能,不會因為轉檔而變差。

林傳凱襄理說:「這兩項測試都順利完成,讓我們能安心採用Microsoft Xamarin。讓我們驚喜的是,它不僅具備優異的跨平台轉換能力,而且可以保持同等級的執行效能,像是導航功能非常耗費運算資源,但測試結果發現,跨平台轉換後的程式效能還是很好。」

 

靈活統整開發團隊,加速服務商品化

三緯國際當前面臨的挑戰是已有演算法,但必須加速進行服務的商品化;其次是因應行動平台的多樣化,無法找到足夠且合適的人才。事實上,除了機器人開發團隊、Android開發團隊以外,三緯國際還編制有iOS開發團隊,有了Microsoft Xamarin的協助,有限開發人力就能更有效地調度。

HANS0021

以機器人導航功能為例,開發團隊耗費一年的時間完成,學習使用Xamarin及程式碼轉換則花了三個月的時間,原本就有C#C++經驗的工程師很快就能上手。也由於對Xamarin的掌握度愈來愈好,現在團隊成員已可直接在Xamarin介面進行開發。

HANS0006

林傳凱襄理表示,未來會以平台的概念來推展機器人,物聯網(Internet of Things) 與雲端服務,也為目標市場之一,舉例來說,其可提供客戶選購及增加所需的功能;其次,吸引開發者參與開發服務,像是導航功能就可以和掃地機器人的開發廠商結合,讓使用者可隨時掌握機器人在家裡的位置,以及使用手機遠端遙控機器人等等類似的產品和服務的結合,必然將讓機器人的應用更為多樣化。

 


 

 

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

七個在 Visual Studio 偵錯時查看變數值的方法

$
0
0

當您執行您的程式而發現有地方結果不如預期,您會如何找出問題所在呢?當我還在學時,我學到的第一個偵錯方式就是到處加上「print()」,然後執行我的程式碼,從輸出結果來看哪裡出錯了。而如果我想要看另一個變數的值,我就會需要再加一個新的「print()」,然後重新編譯、重新執行程式。這會是一個冗長的過程,所以我很高興能告訴您有更好的方法,比起丟一些「print()」到您的程式碼中,之後還要將它們刪除。您可以使用 Visual Studio 偵錯工具來檢視變數。

在這篇文中我會講述在 Visual Studio 偵錯工具中,七種不同的方法來在偵錯的時候檢視您變數的值,而不需要修改您的程式碼。哪個方法是您已經在使用的呢?在底下留言讓我們知道。

如果您有興趣提供我們有關未來想法的回饋,請加入我們的社群來幫我們改進 Visual Studio 偵錯工具。

為了要在偵錯時查看變數的值,您需要先在中斷模式。您可以停止在一個中斷點、單步執行的其中一步或停在一個例外狀況,然後您就可以用這些技巧來取得變數的值。

1.DataTip

暫留在一個變數上來看它的值。

最常用的查看變數方法就是 DataTip。當偵錯工具停止時,將滑鼠游標移到您想看的變數上,DataTip 便會出現顯示該變數的值。

debug-1

您也可以點選在數值旁的圖釘來釘選一個 DataTip 到您的程式碼中。當您執行經過它時,可以直接在行內看到數值的改變。這在您進行迴圈內偵錯時,觀察單一數值在迴圈內不斷改變,可以派上用場。

debug-2

查看更多有關 DataTip 的資訊。

2.自動變數視窗

查看您指令指標所使用的變數。

當您停在程式碼的不同地方,自動變數視窗會自動填入所有目前這行(黃色指令指標指向的那行)所使用的變數與一些周圍的陳述式。哪些周圍陳述式中的變數會自動被填入是取決於您正在偵錯的語言,通常您會看到前三行與後一行的變數。有些語言像是 JavaScript,自動變數視窗並不支援。

debug-3

您可以從 Debug/Windows/Autos Window(Ctrl + Alt + V,A)來打開這個視窗。

3.區域變數視窗

查看目前內容的區域變數。

區域變數視窗將會填入目前有使用的區域變數。就如同自動變數視窗,有出現的變數將會自動被填入。要使用哪一個視窗取決於您想要看哪個範圍的變數。

當有任何變數數值改變時,在所有我們的變數視窗,新的值都將會變成紅字。

debug-4

您可以從 Debug/Windows/Locals Window(Ctrl + Alt + V,L)來打開這個視窗。

查看更多有關變數視窗的資訊。

4.監看式視窗

評估變數、運算式與記錄結果。

共有四個監看式視窗可以使用。這些視窗一開始都是空白的,您可以自己新增您偵錯時需要查看的變數名稱。您可以在名稱欄輸入變數名稱,或是在您的程式碼編輯器中對變數點選右鍵,選擇「Add to Watch」。

debug-5

除了加入一個單一的變數,您還可以輸入任何一般的運算式。所以您可以呼叫方法、計算 lambdas 或做像是「1 + 3」的運算。請注意,當您執行輸入的運算式時,可能會改變您程式的狀態

debug-6

您可以從 Debug/Windows/Watch(Ctrl + Alt + W,1)來打開這個視窗。

查看更多有關監看式視窗的資訊。

5.快速監看式對話方塊

在一個一次性的彈出方塊快速地檢視一個單一變數或運算式的值與內容。

快速監看式視窗是一個您可以用來檢視單一變數或運算式的對話方塊。當您想要有更多空間檢視一個物件的所有內容,但不想要修改您的視窗配置,有這個暫時的對話方塊很方便。

debug-7

您可以在變數上點選右鍵,選擇「QuickWatch…」或使用鍵盤快捷鍵 Shift + F9,來開啟快速監看式視窗。

查看更多有關快速監看式對話方塊的資訊。

6.平行監看式視窗

同時查看在多個執行緒或遞迴呼叫的變數或運算式數值

共有四個平行監看式視窗可以使用。就像監看式視窗一樣,您可以點擊可編輯列的 <Add Watch> 輸入想要查看的變數或運算式名稱。

視窗中的每一行都表示一個不同的執行緒,所以您就可以查看同一個變數在您目前所有的執行緒。

debug-8

這也會顯示同一個執行緒下遞回的值,而每一行表示一次該函式呼叫的反覆運算。

debug-9

您可以從 Debug/Windows/Parallel Watch(Ctrl + Alt + D,1)來打開這個視窗。

查看更多有關平行監看式視窗的資訊。

7.即時運算視窗

使用這個便箋在一個時間點查看和更改變數的值。

當停在一行程式碼時,您可以輸入變數或運算式到即時運算視窗,並按下 enter 來檢視結果。即時運算視窗評估運算式就像監看式視窗一樣,有可能會影響到程式的狀態。

debug-10

您也可以用即時運算視窗來執行複雜的表達式(甚至評估 lambda 表達式),而且可以不需要編輯或重新執行您的程式就可以檢視結果。這個視窗也可以被用在設計的時候,在您開始偵錯的工作階段之前。

debug-11

您可以從 Debug/Windows/Immediate Window(Ctrl + Alt + I)來打開這個視窗。

查看更多有關即時運算視窗的資訊。

總結

這篇文章提供了一個基本概觀,用不同的方法來在 Visual Studio 檢視變數。哪個偵錯的方法您最喜歡呢?請留言在底下讓我們知道。

如果您有興趣提供我們有關未來想法的回饋,歡迎到 Visual Studio Debugger 註冊來幫助我們改進。

 

本文翻譯自 7 Ways to Look at the Values of Variables While Debugging in Visual Studio


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

行動應用開發平台寶典 (二) 行動後端服務

$
0
0

【2016/6/16 號外】雲優先、行動優先 – 微軟在 Gartner 魔力象限的行動應用程式開發平台 (MADP) 成為領導者! 詳情請見 連結


前言

微軟 Azure 的 Mobile back-end as a service (MBaaS) 解決方案是 PaaS 的一種子集合,為行動開發提供連通性 (connectivity) 與可縮放性 (scalability) 的一站式方案,包含加入資料儲存體 (Data Storage)、使用者授權 (User authentication)、推播通知 (Push Notification)、社交媒體整合 (Social media integration)、離線同步 (Offline sync)、分析 (Analytics) 等。開發人員再也不用花時間在基礎建置而是專注在開發更好的使用體驗! Azure Mobile Apps 即提供所有行動開發人員在後端所需的一切。

Capture

使用 Azure App Service 在行動後端

Azure App Service 中的應用程式類型

– 使用 Visual Studio 和 Azure App Service 建置跨平台企業級行動應用程式:Build 2016 影片

Azure Mobile Apps

Capture

 

離線資料同步處理 

離線資料同步處理是 Azure 行動應用程式的用戶端和伺服器 SDK 功能,可讓開發人員建立不需要網路連線就能運作的應用程式。 優點:

  1. 本機快取伺服器資料,改善應用程式回應性
  2. 網路有問題時,仍然可以使用 – 良好的使用者體驗
  3. 沒有網路存取的情況,使用者仍然可以建立修改資料,並且支援連線微弱或者無連線狀況 – 離線編輯
  4. 同步多個裝置間的資料,並在裝置修改相同紀錄時偵測衝突
  5. 高延遲或計量付費網路的網路使用限制 – 只在連接 Wifi 時儲存資料

– 啟用離線同步處理 (AndroidiOSXamarin iOSXamarin AndroidWindows) – Azure 技術手冊:Azure 行動應用程式中的離線資料同步處理

 

使用者驗證和授權 

App Service 驗證/授權是可讓您的應用程式接受使用者登入的一項功能,而不需要您在應用程式後端變更程式碼。它提供簡單的方法來保護您的應用程式,以及使用每位使用者的資料。支援五種現成識別提供者: Azure Active Directory、Facebook、Google、Microsoft 帳號及 Twitter。您的應用程式可以隨意搭配這幾種身分識別提供者,讓使用者選擇如何登入。若要擴充內建的支援,您可以整合其他識別提供者或您自己的自訂身分識別解決方案

– 新增驗證 (iOSAndroidWindowsXamarin.iOSXamarin.AndroidXamarin.FormsCordova) – Azure 技術手冊:Azure App Service 中的驗證和授權

– Single Sign-On 只要使用單一使用者帳戶登入,就能夠存取所有進行工作所需的應用程式和資源 什麼是 SSO ? 影片 、 搭配 Azure Active Directory 的應用程式存取和單一登入

Azure Active Directory 入門學習地圖:由此開始

 

推播通知 

Azure 通知中樞 (Notification Hub) 透過 平台通知系統(PNS) 的基礎結構來傳遞。提供通用介面以及其他功能,以協助支援跨每個平台的推播通知,可讓您將個人化行動推播通知 (例如:折價券、事件通知、地震快訊、電子郵件、多重驗證的一次性密碼等豐富的傳遞模式 – 廣播 / 1:1 / 1:N / tag 機制) 從任何後端 (在雲端或內部部署,各種後端語言 SDK 支援) 安全 (共用存取簽章 SAS – 連結) 的傳送到任何行動平台,每分鐘可傳送給數百萬個裝置的可擴展性。並且可在 Azure 入口網站進行遙測

– 通知中樞快速入門教學課程 (iOSAndroidWindows UniversalWindows PhoneKindleXamarin.iOSXamarin.Android)

– Azure 技術文件:Azure 通知中心 – 通知中樞教學課程和指南

Azure Mobile Apps 入門學習地圖:由此開始

 

透過 Azure Logic Apps 連接企業系統

流程應用程式設計工具

 

連接到現存的企業系統 

  1. 視覺化介面建快速建立商務和工作流程,無須撰寫程式碼
  2. 整合 Web、Mobile 和 API Apps
  3. 與 SaaS 和企業應用程式整合 – 包含 Salesforce、Office 365、Dropbox、Google 服務等
  4. 自動化 EAI、B2B與商業流程
  5. 連結至內部部署資料

– 連結服務清單:連結 這些連結器可以用來建立 Logic Apps、PowerAppsFlow

 

使用 Azure Service Fabric 建置微服務

Service Fabric 是分散式系統平台,其可輕鬆封裝部署管理可調整規模且可靠的微服務,以及解決開發及管理雲端應用程式的重大挑戰。開發人員與系統管理員使用 Service Fabric 後,即無須費心解決複雜的基礎結構問題,只需專注在建置功能,為產品曾增加商業價值,快速上市。Service Fabric 代表新一代的中介軟體平台,能供建置及管理這些企業等級的可調整規模之一級雲端應用程式。且與 Visual Studio 整合,以便開發人員快速輕鬆地在單一微服務上進行建置、測試、偵錯與更新。從開發到部署、到每日管理、維護,以及最終的解除委任,Service Fabric 為雲端應用程式的完整應用程式生命週期管理 (ALM) 提供第一等的支援。

service-fabric-overview

為什麼微服務方式如此重要? 兩個主要原因如下:

  1. 微服務可讓您根據其需求,調整應用程式的不同部分。
  2. 開發團隊能夠更敏捷地推出更新,藉以更快速且更頻繁地為您的客戶提供新功能。

– Azure 技術文件:Service Fabric 概觀

學習更多:

為何要用微服務建置應用程式?

Service Fabric 應用程式案例

– 在 Visual Studio 中建立您的第一個 Service Fabric 應用程式

Azure Service Fabric 入門學習地圖由此開始

 

使用 Azure 實現資料平台服務

SQL databases 使用 Azure SQL Database

SQL Database 是以領先市場的 Microsoft SQL Server 引擎為基礎,位於雲端並擁有許多關鍵任務功能的關聯式資料庫服務。SQL Database 提供可預測的效能無停機時間的延展性商務持續性資料保護等功能,且全都幾乎免管理。如此一來,您便可以專注於快速開發應用程式及加快上市時間,而不是耗費在管理虛擬機器與基礎結構上。由於 SQL Database 是以 SQL Server 引擎為基礎,因此可支援現有 SQL Server 工具、程式庫和 API,讓您可以更輕鬆地移動和延伸至雲端。

  1. 可延展的資料庫模型與工具
  2. 高效能
  3. 備份、複寫與高可用性
  4. 零失效維護
  5. 安全

– Azure 技術文件:SQL Database 文件

Azure SQL Database 入門學習地圖:由此開始

 

NoSQL database 使用 Azure DocumentDB

  1. 建置現代化、規模無限制、行動與網站應用 – 透過獨特的強大的查詢方式與交易資料處理,開發人員可以延伸 DocumentDB 的力量與以 JavaScript 為基礎的客製化查詢運算式或者自定義功能。
  2. 高速發展 – 您可以透過簡單的 RESTful HTTP 介面來存取所有資料庫功能,包括 CRUD、查詢和 JavaScript 處理。開發人員可以借力各語言 SDK 程式庫 – JavaScript、Java、Node.js、Python 和 .NET。

– Azure 技術文件:DocumentDB 文件

Azure DocumentDB 入門學習地圖:由此開始

 

使用 Azure Storage (儲存體) 儲存資料

Azure 儲存體提供一組儲存體服務,可以滿足您所有的商務需求。

對於非結構化資料,您可以選擇 Blob 儲存體 (物件儲存體);對於 SMB 上的雲端檔案共用,您可以選擇檔案儲存體;對於 NoSQL 資料,您可以選擇表格儲存體;對於訊息,您可以儲存在可靠的佇列儲存體;對於Azure 虛擬機器中所執行需要高效能、低延遲區塊儲存體及執行大量 I/O 的工作負載,您可以選擇進階儲存體

– Azure 技術文件:Storage (儲存體) 文件

 

使用 Azure Redis Cache 進行快取

Azure Redis Cache 是以常用的開放原始碼 Redis 快取為基礎而建立。它可讓您從 Azure 內的任何應用程式存取 Microsoft 所管理的安全、專用 Redis 快取。可讓您以飛快的速度存取資料,以便建置可以靈活調整規模的回應式應用程式。您一方面可以使用 Redis 提供的豐富功能集與生態系統,一方面可以享有 Microsoft 所提供的可靠託管監視服務

– Azure 技術文件:Redis Cache 文件

Azure Redis Cache 入門學習地圖:由此開始

 

參考架構

小型 App

Picture1

中型 App

Picture2

大型 App

Picture3

Azure 平台服務全覽:65 種 Azure 服務一覽地圖

下一章節

– 行動應用開發平台寶典 (三) 行動 DevOps (敬請期待)


Capture

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922


.NET Core Roadmap

$
0
0

這篇文章是由 Scott Hunter 撰寫。

 

從我們釋出 .NET Core / ASP.NET Core 1.0 已經兩個多禮拜了。開發團隊利用這兩個禮拜喘息了一下,而現在開始規劃未來將要做的事。我們已經看到很多 .NET Core SDK 的下載與非常多的回饋。請持續給予我們回饋。 

以下是一個粗略的時間表,來看看未來將會有什麼改變。請注意,這些日期是團隊目前努力的目標,但有可能會改變。

 

1.0.1(~2016 八月)

我們正在積極地監測 1.0 版本中要包含到 .NET Core SDK 1.0.1 版本的問題。這個補丁更新並沒有確切的時間,但有可能會在八月初的時候。以下是幾個我們正在研究的首要問題:

  • donet build 的效能改善,將會改善 ASP.NET Core 的發佈時間。
  • 更新 F# dotnet new 模板,讓它們在 .NET Core 上使用最新的 F# alpha 版本。
  • Miscellaneous fixes to the tools based on crash telemetry

 

Q4 2016 / Q1 2017

這將會是一個很小的更新,主要重點是在用 .csproj/MSBuild 替代 .xproj/project.json。專案格式的更新應該會是自動的,只要打開一個 1.0 的專案就會將它更新為新的格式。除此之外,在 runtime 與函式庫也會有新的功能與改進。

.NET Core 1.0 包含了一個 .NET Core Tools preview 版本,叫作「Preview 2」。這個工具是「preview」主要因為我們知道我們會改變工具的體驗在 1.0 之後。在這個版本中 .NET Core .NET Core Tools 都將是「RTM 等級」或「stable」。

.NET Core 工具

  • 支援 .csproj/MSBuild 專案系統
  • dotnet restore 改善,不重建 .NET Core 中的套件
  • 管理機器上架構的新指令
  • dotnet publish 為了最佳的發佈大小,將會發佈必須的 dependencies

語言(可用於 .NET Framework 與 .NET Core)

下一個對於 .NET 語言的版本將會應用於所有 .NET 平台。以下是一個簡短的總結有關於這版本的功能:

  • 把函數程式語言的概念帶入 .NET 語言
    • Tuples
    • 模式比對
  • 效能與程式碼品質
    • Value Tasks
    • Ref returns
    • Throw expressions
    • Binary literals
    • Digit seperator
  • 開發者生產力
    • out 變數
    • 區域函數

這些功能都將可以在 C# 7 中使用。VB 15 也將會實作所有影響語言 interop 的功能(tuplesref returns 等),但有些功能會在下一次的語言更新(例如:模式比對),或並不在 roadmap 中(例如:區域函數)。

除了 C# VB 之外,我們也會釋出一個新的 F# 語言的版本。 F# 4.1 將會包含像是下面這些東西:

  • 完全支援 .NET Core
  • 更好的 IDE 體驗,在工作區支援的 F# 語言服務
  • New language features such as struct tuples which interoperate with ValueTuple, more support for annotating types as structs, support for the fixed keyword and more

ASP.NET Core

  • Web Sockets
  • URL Rewriting Middleware
  • Azure
    • App Service 啟動時間改善
    • App Service 記錄提供者
    • Azure 金鑰保存庫提供者
    • Azure AD B2C 支援
  • 容器與微服務
    • Service Fabric 支援透過以伺服器為基礎的 WebListener
    • MVC & DI 啟動時間改善
  • 預覽
    • SignalR
    • 檢視頁面(不用 MVC Controllers 檢視)

.NET Core Runtime 與函式庫

  • ARM 32/64
  • 更多 Linux 的發佈(從原始碼建置)

Entity Framework Core

  • Azure
    • 瞬態錯誤處理(彈性)
  • 對應
    • 自訂類型轉換
    • 複雜類型(value objects
    • Entity entry APIs
  • 更新管道
    • CUD 預存程序
    • 更好的批次處理(TVPs
    • Ambient transactions
  • 查詢
    • 穩定性、效能
  • 移轉
    • 種子資料
    • 穩定性
  • 反向工程
    • 多元化
    • VS 物件模板(UX

 

Q1 2017 / Q2 2017

這個版本將會把許多消失的 API 加回 .NET Core,包含網路功能、序列化、資料等等。Looking at the various flavors of .NET there is a lot of common BCL code that is not tied to App Models (WinForms, WPF, ASP.NET, etc)。這些 API 將會是 .NET Standard 2.0 的一部分,將會同時被釋出,讓 API 可以在 .NET Framework.NET Core 與 Xamarin 保持一致性。而撰寫可攜式程式碼,可以執行在所有主要針對 .NET Standard 2.0 .NET 平台將會更容易。期望在我們釋出 Q4/Q1 版本之後可以開始看到這個工作的預覽版。

 

更好的溝通

我們希望團隊在做的事可以更加透明化。為了做到這點我們計劃更頻繁在這個部落格上更新團隊的訊息。以下是未來標題的粗略清單:

  • .NET Core Roadmap(本文)
  • ASP.NET Upcoming Highlights
  • Entity Framework Upcoming Highlights
  • .NET CLI Upcoming Highlights
  • Support and Versioning .NET Core
  • Telemetry in .NET Core
  • .NET Standard
  • APIs Returning
  • Project Conversion from project.json to .csproj

下週我們希望展示一些例子有關 .csproj/MSBuild 的轉換,與 ASP.NETEF  .NET CLI 其中之一的新功能深入剖析。

謝謝您讀完這些,請持續給予我們回饋!

 

本文翻譯自 .NET Core Roadmap


 

netcore

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

如何在您的 Visual Studio Team Services 帳戶上設定 Azure 帳單

$
0
0

Team Services

只有在您的帳號需要增加超過免費帳號的使用者人數和團隊服務,才要設定帳單。例如:當您想要增加超過五個需要基本存取的使用者或您的帳號已經用完每個月的免費建置時間來完成您的部署,就會需要設定帳單。學習更多有關 Team Services 使用者額外服務

如果您是從 Visual Studio Marketplace 來購買您的 Team Services 帳號,Visual Studio Marketplace 將會在您第一次購買時幫助您開設帳單。

您會需要什麼來開設帳單?

Microsoft Azure 為您的 Team Services 帳號處理帳單,所以您將需要:

如果您沒有Azure 訂用帳戶,請到這裡註冊。或有 Azure 管理員新增您為一個 Azure 訂用帳戶的共同管理員。請確認您有使用與 Team Services 帳號所有者相同的 email

您將會綁定這個訂用帳戶到您的 Team Services 帳號在 Azure 傳統入口網站 Azure 入口網站。您設定這個連結之後,您就可以為更多使用者及團隊服務付款了,像是持續整合效能測試。您的 Azure 訂用帳戶有所有必要的付款資訊,所以您不用分別為您的 Team Services 帳號設定這些。Azure 帳單如何運作?

如果您沒辦法取得您的 Azure 訂用帳戶,請與 Azure Support 聯繫。

 

綁定 Azure 訂用帳戶到您的 Team Services 帳號來付款

您可以在 Azure 傳統入口網站或 Azure 入口網站按照以下的步驟,兩個入口網站都會給您相同的結果。

Azure 傳統入口網站

  1. Team Services 帳號所有者與 Azure 訂用帳戶共同管理員或更高的權限登入 Azure 傳統入口網站
    如果您有瀏覽器的相關問題,請確定您使用支援的瀏覽器
  1. Visual Studio Team Services,開始綁定您的帳號。billing-1
  1. LINK TO EXISTING 選擇您的 Team Services 帳戶,如果您有多個帳號。billing-2
    為什麼我的選項看起來不一樣?

    如果您有多個訂用帳戶,您也可以選擇其中一個。
    billing-3
  1. 完成綁定您的帳號。
    Azure 設定連結之後,您的 Team Services 帳號就會出現連結到您的 Azure 訂用帳戶。billing-4

下一步

 

Azure 入口網站

  1. Team Services 帳號所有者與 Azure 訂用帳戶共同管理員或更高的權限登入 Azure 入口網站
    如果您有瀏覽器的相關問題,請確定您使用支援的瀏覽器
  1. Browse > Team Services accounts 選擇您的 Team Services 帳號。billing-5
  1. 選擇您的 Azure 訂用帳戶。完成綁定您的帳號。billing-6
    Azure 設定連結之後,您的 Team Services 帳號就會出現連結到您的 Azure 訂用帳戶。billing-7

下一步

 

為您的 Team Services 帳號新增備用的帳單管理員

為了讓其他人也可以管理帳單或為您的 Team Services 帳號進行購買,新增一個共同管理員到連結您 Team Services 帳號的 Azure 訂用帳戶。

  1. Azure 訂用帳戶管理員的身份登入 Azure 傳統入口網站
    您只可以透過 Azure 傳統入口網站新增訂用共同管理員。
  1. 新增共同管理員到您的 Azure 訂用帳戶。billing-8

下一步

Q&A

Q:我要如何找到帳號所有者?

A:如果您至少要有基本存取權,您可以在您的帳號設定裡找到帳號所有者

  1. 登入您的 Team Services 帳號(https://{youraccount}.visualstudio.com)。
  2. 到您的帳號控制面板。
    billing-9
  3. 到您的帳號設定,即可找到帳號所有者。
    billing-10

 

Q:哪個 Azure 訂用帳戶可以連結到我的 Team Services 帳號和用來付帳?

A:您可以使用不屬於下列這幾個的 Azure 訂用帳戶

如果您有其中一個的訂用帳戶,可以設定一個分開的隨用隨付 Azure 訂用帳戶

重要:有些 Azure 訂用帳戶包含:

  • Azure 點數的福利。然而,您不可以使用這些點數來支付 Team Services 上的購買。
  • 預設的消費限制
    在您使用這些 Azure 訂用帳戶付款時,確定您無限期刪除此消費限制。以免當用的收費被延至下個月,所有這個訂用帳戶的資源都將被暫停,包含 Team Services 購買、Visual Studio Marketplace 購買與 Azure 資源。
    billing-11 billing-12
    如果您有訂用帳戶的帳號管理員的權限,可以到 Azure 帳戶中心來移除消費限制:
    1. 登入 Azure 帳戶中心(帳戶 > 訂用帳戶
    2. 選擇您的 Azure 訂用帳戶。
    3. 無限期刪除您的消費限制。

 

Q:為什麼我的選項看起來不一樣?

A:您的選項可能長得不一樣因為:

  • URL:這個清單只顯示您擁有的 Team Services 帳號。為什麼我沒看到任何帳號?
  • Directory:您所選擇的 Team Services 帳號可能或可能沒有使用 Azure Active Directory(Azure AD)來控制存取與授權使用者。什麼是 directory?為什麼它連結到我的帳號?
  • Subscription:只有在您有多個 Azure 訂用帳戶時才會出現。這些訂用帳戶也可以透過在 Azure 傳統入口網站的 Subscriptions 清單選擇 directory 來篩選:
    billing-13

 

Q:Azure 帳單是如何運作的?

A:當您連結您的 Team Services 帳號到 Azure 訂用帳戶時,您選擇一個您有共同管理員或更大權限的 Azure 訂用帳戶。如果您沒有 Azure 訂用帳戶,您也可以註冊一個新的或有 Azure 管理員將您新增為共同管理員到 Azure 訂用帳戶。

付款是設定用信用卡或在有些情況用發票。您的購買費用將會顯示在您每個月的 Azure 帳單上。

注意:您必須保持您的 Azure 訂用帳戶信譽良好。如果您的 Azure 訂用帳戶被取消或是不能使用,例如:因為付款的信用卡到期,任何用此 Azure 訂用帳戶購買的東西都將會在下個月的第一天關閉。為了避免失去您 Team Services 購買的存取權,請保持您的 Azure 訂用帳戶活躍且更新。

 

Q:我什麼時候要付款?

A:您只有在需要超過免費門檻的使用者或團隊服務才會被收費。您的費用在第一個月是按比例分配的,在這之後,您將會在每個月的第一天自動被收費。更多有關定價的資訊在這裡

 

Q:為什麼我的第一筆帳單金額比我想像得還大?

A:您第一個月的帳單金額會依照使用天數計算,結合在下一個月的帳單之中,且付款都是在每月1號。

 

Q:我可以連結一個 Azure 訂用帳戶到多個 Team Services 帳號嗎?

A:可以,但您不能連結一個 Team Services 帳號到多個 Azure 訂用帳戶。

 

Q:為什麼不能連結我的 Team Services 帳號?

A:這可能是因為:

  • 您並不是 Team Services 帳號所有者。
  • 您並沒有至少共同管理員的權限在您想要連結的 Azure 訂用帳戶上。
  • 如果您沒有看見任何 Team Services 帳號,您的帳號可能已經連結到其他 Azure 訂用帳戶。
  • 如果您的 Team Services 帳號使用 Azure Active Directory(Azure AD)來授權使用者,您可能要選擇一個與連結到您 Team Services 帳號不同的 directory 在 Azure 入口網站。要選擇您 Team Services 帳號所用的 directory,打開 Azure 入口網站的 Subscriptions 清單:
    billing-14

 

Q:是否有付款限制,會讓我不能連結 Team Services 帳號到我的 Azure 訂用帳戶?

A:有,您在澳洲東部與南印度只可以連結帳號到有同一個地區付款地址的 Azure 訂用帳戶。

 

Q:為什麼我的 Team Services 帳號已經連結到一個 Azure 訂用帳戶了?

A:您的 Team Services 帳號可能手動地透過 Azure 或在從 Visual Studio Marketplace 購買時,設定帳單到一個 Azure 訂用帳戶了。這個 Azure 訂用帳戶也將會用來支付您帳號之後所有的購買。

 

Q:我要如何停止付款?

A:以 Team Services 帳號所有者或 Azure 訂用帳戶至少共同管理員權限的身份登入 Azure 傳統入口網站Azure 入口網站。選擇您的 Team Services 帳號,將所有付費的使用者及團隊服務關閉。您的 Team Services 帳號與帳單將不會顯示任何更動直到下個月,這些更動才會生效。您還是會被收取您已使用的團隊服務費用。

 

Q:如果我取消我的 Azure 訂用帳戶會怎樣?

A:您的 Team Services 帳號會回到每個月的免費額度,但您將會保留任何付費使用者或持續整合代理程式直到下個月。您的帳號會保持連結到您的 Azure 訂用帳戶直到您斷開連結,或當訂用帳戶無法使用時自動斷開連結。

 

Q:我的信用卡過期會怎樣?

A:您的 Team Services 帳號會回到每個月的免費額度,但您將會保留任何付費使用者或持續整合代理程式直到下個月。您的 Azure 訂用帳戶最後會無法使用,要修復這個問題,要重新激活您的帳戶並恢復您的帳戶付款設定。

 

Q:我的訂用帳戶被停用會怎樣?

A:如果您是 Team Services 帳號所有者或 Azure 訂用帳戶管理員,可以在這裡檢查您的訂用帳戶狀態,然後試著修復您的訂用帳戶,這將會恢復您帳戶的支付設定。或者您也可以連結您的 Team Services 帳號到另一個 Azure 訂用帳戶。當您的訂用帳戶被停用,您的帳號會回到每個月的免費額度直到您的訂用帳戶被修復。

 

Q:如果斷開我的 Team Services 帳號連結會怎樣?

A:您的帳號下個月開始將會回到五個免費使用者的基本存取權限。

  • 您還是要支付這個月的付費使用者與持續整合代理程式。
  • 服務像是持續整合或效能測試將會立刻回到每月的免費額度。您將會要支付所有您已經使用的額度。
  • 您的帳號將不再出現在 Azure 入口網站。

您可以隨時重新連結您的帳號到另一個 Azure 訂用帳戶。

 

Q:什麼是 directory?為什麼它連結到我的帳號?

A:Directory 使用 Azure Active Directory(Azure AD)幫助您授權使用者與控制雲端資產的存取。Directory 控制哪些人可以取得您 Team Services 帳號的存取權限。所有帳號的使用者必須在 directory 中來取得存取權限。如果沒有 directory,Team Services 帳號所有者承擔所有管理存取的責任。有了 directory ,directory 管理員控制誰可以加入 directory 來取得存取。您的 Team Services 帳號被帳號所有者連結到一個 directory。瞭解更多有關您帳號的管理工作存取

 

Q:哪裡可以檢查我的帳單或更新我的帳單細節在我的 Azure 訂用帳戶?

A:如果您是 Azure 帳號管理員,在 Azure 帳號入口網站查看您的訂用帳戶

 

Q:我有其他有關 Azure 訂用帳戶與帳單的問題?

A:您可以到 Azure 計費與訂用帳戶常見問題 查看,或試試 Azure 支援

 

Q:我要如何取得 Team Services 的幫助或支援?

A:您可以試試 Team Services 論壇Team Services 支援

 

本文翻譯自 Set up billing to pay for more Visual Studio Team Services users and services


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

用 Ionic & Visual Studio 建立高品質的行動 App

$
0
0

您是一個正在建置行動應用程式的網頁開發者嗎?還是您正在考慮加入網頁開發者從開發行動網頁變到開發行動應用程式的行列呢?我們提供一個全新的 Visual Studio 範本,建置在 Apache Cordova 平台之上、Ionic UI framework、使用 TypeScript 語言。

如果您還不熟悉這個,Ionic 是一個非常熱門的起始點對於 Cordova 的開發者;幫助您建置有出色使用者體驗的 Android、iOS 與 Windows 10 應用程式。本地的 SDKs 提供一組對行動裝置最佳化的現成的 UI 控制。另一方面,HTML 只提供一組原始物件─長方形─來畫您的 UI。Ionic 為行動開發者傳遞以 HTML 為基礎的控制。

我們的 Tools of Apache Cordova(TACO)團隊這一年以來一直與 Ionic 團隊密切地合作,來確保 Visual Studio的開發者在使用 Ionic framework 與 TypeScript 語言能有一流的體驗,而 TypeScript 是選擇用來開發即將到來的 Ionic 2 framework 的語言。這週我們釋出了兩組使用 TypeScript 語言的 Ionic 範本。

點選上面的連結來下載它們,或閱讀更多有關它們的資訊。

 

來體驗看看 Ionic 2 吧!

Ionic 團隊正在為下一個以 Angular 2 為基礎的 Ionic RC 版本努力工作。我們的團隊同樣致力於讓 Visual Studio 可以有很棒的 Ionic 2 支援,我們今天要跟您分享的是一個 Ionic 2 範本的早期版本,基於目前的 Ionic 2 Beta 10 版本。

Ionic

這組範本包含與上面 Ionic 1 版本相同的三個範本:

  • Blank(空白)
  • Sidemenu(側目錄)
  • Tabs(索引標籤)

Ionic-1

我們團隊正釋出這些範本在 Visual Studio 2015 作為實驗,同時努力在 Visual Studio “15” ,也就是下一個 Visual Studio 版本做出卓越的 Ionic 2 開發者體驗 。

有一些開發者體驗的小缺陷,被標註在 Project Readme 頁面,您將會在第一次用範本建立專案時看到。值得注意的是,當要使用這些 Ionic 2 範本時,您將會需要做以下的事:

  • 安裝 Update 3 或更新的 Visual Studio 2015
  • 安裝最新的 ASP.NET Web tooling
  • 第一次建立您的專案之後,等待「(Restoring)」訊息從 dependencies 物件消失在 Solution Explorer
  • 在建置之前,開啟 Task Runner Explorer 從 View > Other Windows > Task Runner Explorer 目錄。這會啟動 Visual Studio 執行此範本使用的客製化 Gulp 建置 script。

要瞭解更多有關這個 framework 與如何使用這些 beta 範本,看看我們最新的 Ionic 2 教學

 

TypeScript 與 Ionic 1;更棒的組合

對 JavaScript 開發者的 Ionic 1 範本已經提供給 TACO 開發者一段時間了。有了這個更新,我們對 JavaScript 範本做出一些細微的更新,新增一組使用 TypeScript 程式語言的新範本。

一樣的三個 Ionic 範本現在 JavaScript 與 TypeScript 的開發者都可以使用:

  • Blank(空白)
  • Sidemenu(側目錄)
  • Tabs(索引標籤)

一旦安裝了,您將會在 File > New Project… 目錄的 JavaScript > Apache Cordova AppsTypeScript > Apache Cordova Apps 底下找到這些。

Ionic-2

現在有了 TypeScript 的支援,您可以取得與其他 TypeScript 開發者一樣的好處。一些重點包含:

  • 高精確度的 IntelliSense
  • 重構工具
  • 為來源找尋所有的 references
  • 基於符號的巡覽程式碼

了解更多有關使用 Visual Studio & Ionic 1 工作,查看我們的Ionic 1 教學

 

幫助我們讓 Ionic 體驗更棒!

請試試看 Ionic 2 Ionic 1 TypeScript 範本並讓我們知道您的感想!您可以直接留言在下載頁面,或寄 email 給我們在 Stack Overflow 上與我們聯絡在 Twitter 寄給我們一個 tweet、或直接提供回饋給我們的文件在我們的文件網站

 

本文翻譯自 Create high quality mobile apps with Ionic & Visual Studio


 

VS     typescript

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

筆跡畫布與尺:結合藝術與技術

$
0
0

Ink-1

整合筆跡到您的 app 有多簡單呢?

就僅僅需要一行 XAML

在這篇文章中,我們將要引導您體驗新的 Windows 10 筆跡功能,使用者透過書寫與繪畫來溝通,比以往更為容易。您將會學到如何實作這些新的功能到您的 Windows app 與他們如何改善您的使用者體驗。

對通用 Windows 平台的開發者來說,要掛接這個功能最簡單的方式就是透過筆跡畫布(Ink Canvas)。我們用一些例子來開始說明吧!

 

內建的體驗

筆跡有很多潛在的應用。作為一個開頭,思考一個典型的筆跡應用程式使用者是有幫助的,例如:一個保險公估員幾乎都不待在辦公室,他將會想要隨時能夠做筆記和在文件上做註記。

有三個內建的 Windows Ink 體驗-點擊您的筆,Windows Ink Workspace 就會出現。Windows Ink Workspace 提供 Sticky NotesSketchpad Screen sketch 等程式,而它們全部都是用 XAML Ink Canvas 建置的。Workspace也提供了最近使用支援 Windows Ink 的應用程式連結。

Ink-2

Sticky Notes 就如同您想像的,讓您能記錄一些提醒事項並將它們放在您的桌面。最酷的是 Cortana 有與 Sticky Notes 整合,所以它可以將這些提醒事項放到您的行事曆上。

這對我們的公估員來說將會非常有幫助,他們要持續地約時間然後還要再更改他們。實際的便利貼很容易就搞丟了,而這些筆跡便利貼不只可以把所有筆記都放在同個地方,還可以數位化這些資訊,用其他應用程式整合它變成一個工作流程。

Ink-3

Sketchpad 讓您可以做筆記、塗鴉和自由發想就像一個一般的筆記本一樣。它使用一個自訂的 Windows Ink 工具列,可以新增復原、複製、儲存與分享等功能。

這也或許會是一個很棒的應用程式對於我們的公估員。他可以同時邊做筆記邊畫一些有幫助的圖表。最棒的是這些是全都在同一份文件,而不是分開在多個繪圖與文書程式。

Ink-4

最後,screen sketch 讓您能夠螢幕截圖並加上紅線、註解與塗鴉。由於它的簡單性,他可以很容易用來拍任何照片用您裝置的相機。然後您就可以新增註解像是照片的日期-例如:一張白版的照片你需要在別人擦掉之前先存下來。

因為您使用隨身攜帶的裝置,所以您不需要再回到桌上新增筆記或分享它給其他會議的參與者。甚至有一個分享的按鈕在工具列,讓您能馬上發送您的 screen sketch

Ink-5

對於我們的保險公估員來說拍白版照似乎沒這麼有幫助。然而有辦法拍下凹陷的汽車或天花板漏水並可以根據他所觀察到的做註記,將會讓節省他的時間與煩惱。他可以同時拍照與做筆記,而這些資訊與觀察全都是新鮮的。

 

實作它有多簡單呢?

只需要一行 XAML 就可以把 Windows Ink 的功能帶到您的應用程式中。InkCanvas 讓您可以直接畫在畫布空間。只需要再多加一行 XAML 來新增一個筆跡工具列。

InkToolbar 包含繪畫、橡皮擦、螢光筆與尺的按鈕。

Ink-6

InkToolbar 也是可延展的,讓開發者可以新增自訂的工具(InkToolbarCustomPenButton InkToolbarCustomToolButton)在螢光筆與橡皮擦按鈕之間,也可以自己切換按鈕到尺的右邊。

 

筆與觸控、藝術與技術

尺真的體現了這技術最酷的部分-但它用一個微妙的方式。就像一把實際的尺,您可以用一手的手指移動 InkToolbar 的尺,然後用另一隻手來做圖。不管您是用筆還是手指直接進行操作,您都可以將您的手掌靠在做圖的表面,就像您有紙跟筆一樣。

Ink-7

讓技術顯得自然需要很多功夫-要自然並不容易-而且很多東西都發生在同一時間。首先,Windows Ink 主動區別筆與手指。大多數的繪畫技術在這幾年還沒辦法做到這樣,無論是忽略一個或使得手寫筆與手指難以區分。

第二,Windows Ink 區別手掌與筆和觸控。遊蕩的手掌一直以來都是觸控面板的怪物。人都會很自然把手掌靠在面板上,因為 1)很舒服 2)我們不認為手掌是繪畫的工具。有了 Windows Ink,這些都不再是問題了。

藉由刪除這些底層技術的構件,Windows Ink 移除了拘束(與干擾)讓使用者可以做他的工作。因為我們使用現實生活中的筆和紙來塗鴉與溝通,這意味著藝術與工作相關的任務可以更容易完成,也可以更享受。

 

總結

這麼久以來鍵盤還是電腦運算的重要的一部份;有許多事,像是輸入資料與文書處理,使用鍵盤與滑鼠還是比較容易完成。然而很多情況,Windows Ink 是較佳的選擇,因為它提供了更自然更直覺的互動,對於沒有花大多數的時間在辦公桌前,要時常奔走的人。因為易於實作,開發人員可以快速地擴展他們目前的應用程式,使用筆跡的功能或甚至開發新的相關功能。

如果您想閱讀與看看更多有關 Windows Ink 的內容,這裡有些文章與影片您會覺得很有趣:

開始使用 Windows Visual Studio

 

本文翻譯自 The Ink Canvas and Ruler:combining art and technology


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

VS 2015 Enterprise 與 Pro 之間的六個差異

$
0
0

VS2015-1

因為我們喜歡更改版本名字並不時搬移一些功能,我想試著簡明地概述 Visual Studio 2015 Enterprise 與 Visual Studio 2015 Professional。

作為背景,2015 的版本對 Visual Studio IDE 陣容作出了一些改變,用新的 Enterprise 版本取代了 Premium 與 Ultimate 版本。這表示很多原本使用 Premium 的人現在叫做 Enterprise,而看看那些您會選擇 Enterprise 的原因,這也會有幫助於回答「現在我升級為 Enterprise 了,那裡面到底有什麼?」。

 

IntelliTest

IntelliTest 是一個 2015 的全新功能,它可以幫助您分析原始碼並建立單元測試,來達到 100% 的程式碼覆蓋率,對於該程式碼的每一個路徑。

這表示您可以更輕易地讓更多程式碼被單元測試所覆蓋,幫助您新增單元測試到沒有單元測試的程式碼,並且讓掌握為新的程式碼建立單元測試很容易。這並不代表您將不用再寫一個單元測試,我認為這是幫助您產生核心的單元測試,讓您能基於您的領域知識專注在一些特別的測試與情境。

您可以設定它允許例外,覆蓋物件的創建等等。

VS2015-2

它可以與 MS Tests、NUnit、xUnit 和其他任何在 Visual Studio 中提供 adapter 的測試 framework 一起使用。目前僅限於 C#。

這裡有一個35分鐘的影片來更深入了解 IntelliTest

 

IntelliTrace

IntelliTrace 是一個歷程或事後分析的偵錯技術,幫助我們處理「我不能重新產生它」的問題,通常跨越開發與測試環境。它在 2010 被引入所以並不新,而且它可以被使用在開發、測試與生產環境。

一個簡單的使用例子:

測試者在測試環境中發現一個錯誤。測試者啟用 IntelliTrace 再重新產生這個錯誤,而這個錯誤發生時就會包含 IntelliTrace 的記錄檔。這個記錄檔會包含測試環境的呼叫與事件。

開發者在 Visual Studio Enterprise 開啟錯誤與 IntelliTrace 的記錄檔,可以檢視引發的例外與那些例外的堆疊追蹤。開發者可以選擇任何例外來偵錯,Visual Studio 將會進入到偵錯模式,並停止執行在您選擇的例外發生的那行程式碼。開發者可以向前或向後檢查程式碼,來了解發生什麼事。

主要優點­­ – 開發者不需要為了了解如何修復一個錯誤,而努力產生一樣的條件以複製出相同錯誤。IntelliTrace 讓開發者可以伴隨著偵錯進行,即使這之後才會發生而且在不同的環境。對於基於環境所產生的問題(例如:可以在測試環境被重新產生,但在開發環境不行),這可以節省相當多時間。

這需要 .NET 2.0 或更高的 C# 或 VB.NET 和在 ASP.NET、Microsoft Azure、Windows Forms、WCF、WPF、Windows Workflow、SharePoint 與 64-bit 應用程式下工作。您不需要 Enterprise 來收集 IntelliTrace 的資料,但您需要 Enterprise 來使用它。

這裡有更多相關的內容,MSDN 文件12分鐘的影片

 

架構工具

Enterprise 包含了架構工具而這些分成兩個陣營;UML 與 non-UML 工具。

UML 工具 提供很多不同種類的圖表,像是 Class、Sequence、Activity、Use Case 與 Component 圖表,而且允許正向與反向工程。

Non-UML 工具為 Code Maps 與 Layer Diagrams。這些不同於 UML 工具,是根本上地涉及底層的原始碼。Code Maps 讓您可以視覺化地了解與探索您的程式碼。

VS2015-3

為什麼這很有用?它讓您可以建構對於您程式不同方面關係的理解,而不需要實際去讀那些原始碼。Code Maps 讓您從組件深入到命名空間、類別、方法與深入到底層的原始碼,也可以過濾掉那些您不感興趣的元素,像是測試程式碼或系統組件。

您可以新增您自己的註釋與分組,重新排列圖表與分享給其他人,透過 email、儲存成圖表或直接在 Visual Studio 中。一個 Professional 的使用者可以檢視 Code Maps 但不能編輯它們。

這對於一個剛新加入一個專案的人或是當您要更改您並不熟悉或可能沒辦法記得的程式碼來說相當有幫助。

一個經常被忽略的功能就是您也可以用 Code Maps 來偵錯,而這真的很有幫助,在偵錯時不需要在腦中持續追蹤程式碼。

VS2015-4

Code Maps 適用於 .NET 與 C/C++。為了讓您更清楚了解,這裡有一個 9 分鐘的概覽影片與一些相關的文件

 

發行管理 Release Management

您想要持續部署您的程式碼到多個異質的環境,無論混合多種您需要的自動與人工審核機制,或者履行各種行為在每個環境之中(預備、佈署、測試等環境)?

這也就是在 Visual Studio 2015 新的版本管理工具所提供的。版本管理組成 Visual Studio DevOps 支援的一個核心部分,提供持續部署的支援與補充新的建置系統、共享同樣的跨平台代理程式。

VS2015-5

要建立與編輯發行定義、定義環境、需要的佈署步驟、批准等等是需要 Enterprise 版本。這裡有個 2 分鐘的概覽影片或這個 30 分鐘更深入的影片

 

測試工具

來簡單地總結,您可以在 Enterprise 取得所有測試工具。換一種說法:

  • 測試案例管理
  • 手動測試
  • 探勘測試
  • 自動化功能測試
  • 負載與效能測試

前三個項目包含在 Microsoft Test Professional,是 Enterprise 版本的一部分。我將不會在這提到,但您可以在這裡了解更多相關資訊。對於 Enterprise 來說獨特的是自動化功能測試和負載與效能測試。

Visual Studio 自動化功能測試的工具為 Coded UI。正如它名字暗示的,這會建立自動化測試(即包含自動驗證),並將他們記錄為程式碼 ­– C# 或 VB.NET。當您執行操作或在程式碼等級用重複使用測試建立測試,您可以記錄它們。您也可以用手動測試來建立自動化測試,然後新增憑證。

VS2015-6

Coded UI 讓您可以建置驅動應用程式 UI 測試的回歸套件,而要遠端執行這些回歸測試,如在測試環境,甚至是上面討論的發行管理功能的一部分。請注意,遠端執行 Coded UI 測試並不需要 Enterprise 版本,所以其他使用者可以執行它們。這裡有一些讓您更了解 Coded UI

負載與效能測試已經在 Visual Studio 中很長一段時間了,而且發展了很多年。核心的功能是相同的;建立一個情境來測試效能,用某個數量的虛擬使用者在給定的時間內執行一些測試。您可以把網路狀態納入考量(例如:10% 的使用者是在一個很差的網路連線狀態,而他們的體驗如何?)與收集系統效能計數器資訊(CPU、記憶體、硬碟 I/O 等等):

VS2015-7

這裡有一個執行負載的教學。

最近的改動包含了選擇使用 Azure 來產生負載的功能,也就是說您不需要自己尋找硬體與設定測試 rig。這不須對負載測試作任何更動,因為它只是一個選擇雲端和內部部署的按鈕而已。選擇雲端代表您就可以選擇要使用哪個 Azure 數據中心作為負載來源:

VS2015-8

這裡有一些關於負載,與一個 10

 

MSDN

最後,您可以從 Enterprise 的 MSDN 取得的額外好處(比起 Professional):

  • 更多的 Azure 額度(每個月 NT 4,700 元 vs Professional 每個月 NT 1,600 元),所以您可以免費使用更多 Azure 服務,像是運行虛擬機。
  • 合作夥伴 eDevTech 的 modern requirements Management
  • Office 365 開發者訂閱。
  • 無限下載,開發測試使用的 SharePoint、Exchange、Dynamics、生產環境可用的 Office 與 PowerBI 。
  • 45 堂 Pluralsight 課程 vs Professional 30 堂
  • 2 組 10 堂的 Microsoft e-learning 課程(Professional 只有 1 組)
  • 4 個原廠技術支援點數(vs Professional 版本 2 個)

您可以在取得更多詳細的資訊。

希望這讓您初步地了解這些差異,而如果您正在決定要使用哪個版本或決定升級為 Enterprise,您都將可以對這些主要的額外功能有更多的了解。

 

資源

 

本文翻譯自 6 differences between VS 2015 Enterprise and Pro


VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

兩個簡單又快速的網路應用程式負載測試工具

$
0
0

我這個早上在 ASP.NET Community Standup,Jon 提及了一個新的負載測試工具叫作「Netling」。這讓我想到一般簡單的輕量型負載測試,我有用過大的企業級系統像是 SilkTest,還有以雲端為基礎的負載測試工具像是 Azure Visual Studio 裡的那些。我也用過命令行工具像是 WCAT,一個雖然舊但很好用的負載測試工具。

我想我會花一點時間,來看看這兩個工具在本地的運行。目標就是看看我可以多容易地進行快速負載測試與反覆察看結果。

 

NETLING

Netling 的作者是 Tore Lervik,它是一個很棒的小小負載測試器用戶端,用來做一些簡單快速的網路測試。它是開源並且是在 GitHub 上,能讀其他人的程式碼真的很有趣。

Netling 包含一個 WPF 與 Console 客戶端,完成所有工作只需簡潔地納入核心專案。有了 WPF 版本,您進行測試並選擇性地標記那個測試為基準,然後您就可以做一些細微的改變,再快速地重新進行測試。您將會得到紅色(壞)或綠色(好)的結果如果有改善的話。不過這樣的標示或許應該調整,來確保紅綠色盲的人也可以辨識。不管怎樣,這真的是一個很棒又簡潔的 UI 而且您一定會想要丟進實用工具資料夾,並常常使用它。

 

千萬記得在不是自己的伺服器上做負載測試是很不好的,請當個好人!

 

請注意目前都還沒有正式的「版本」釋出,所以您將需要複製存放庫並建置這個 app。幸運的是它可以非常簡潔地建置在免費版的 Visual Studio Community 2015 上。

twotools-1

Netling 主控台用戶端酷炫的 ASCII 圖表也是蠻值得注意的。

D:\github\Netling\Netling.ConsoleClient\bin\x64\Debug [master ≡]> .\netling.exe http://www.microsoft.com -t 8 -d 20

Running 20s test @ http://www.microsoft.com/
    Threads:        8
    Pipelining:     1
    Thread afinity: OFF

1544 requests in 20.1s
    Requests/sec:   77
    Bandwidth:      3 mbit
    Errors:         0
Latency
    Median:         99.876 ms
    StdDev:         10.283 ms
    Min:            84.998 ms
    Max:            330.254 ms

    █
    █
    █
    █
   ██
   ███
████████████████████ █                                 █                       █
84.998 ms =========================================================== 330.254 ms

D:\github\Netling\Netling.ConsoleClient\bin\x64\Debug [master ≡]>

我確定 Tore 會很感激您們的幫助,所以快到 https://github.com/hallatore/Netling 然後提交一些問題,但更重要的是可以跟他聊天並提供一個提取要求

 

WEBSURGE

WebSurge 是一個有更完整功能的工具,作者為 Rick Strahl。Rick 是在 .NET 部落。WebSurge 在個人使用上提供免費又快速的下載但需要註冊,個人使就要跟 Rick 討論。

WebSurge 也使用 Fiddler Web Debugging Proxy 的語言,所以您可以記錄並播放網路流量與產生複雜的負載測試情境。工作階段檔就只是您可以放進原始檔控制的測試檔並分享給其他組員。

twotools-2

我知道還有很多其他的選擇,而這裡只是兩個真的很快又容易操作的工具,您可以用來輕鬆地建立 HTTP 要求,然後隨意地播放並在開發過程中反覆執行。

在開發時您都使用什麼工具來進行負載測試與反覆測試效能呢?請在底下留言來讓我們知道。

 

本文翻譯自 Two tools for quick and easy web application load testing during development


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

Linux 版的 PowerShell 發佈囉!而且是開源的喔!

$
0
0

我從 10 年前就開始做 PowerShell 了。來看看這個影片是 2007 年我從 Jeffrey Snover 身上學習有關 PowerShell 的知識。我致力於 PowerShell 好幾年,並廣泛地寫部落格,最終用 PowerShell 來編寫自動化與在全世界的線上零售銀行業建立許多龐大的系統。

 

而來到了今天,Microsoft Linux PowerShell使 .NET Core 完全,您可以到查看。

PowerShell-1

 

Jeffrey Snover 在 2014 年內部預告,PowerShell 終究會變成開源的,隨著.NET Core 的到來與持續努力在多個 Linux 發行版本,揭開了開源的序幕。如果您有在關注的話,應該不難預測到這件事的發生。以下是 PowerShell 已經開源的部分:

 

到處都可以取得 PowerShell

好,那您要到哪裡可以取得呢?http://microsoft.com/powershell 是 PowerShell 的首頁,而所有相關的東西都可以從這裡找到。

PowerShell 的開源專案在 https://github.com/PowerShell/PowerShell ,而這裡是 Ubuntu 14.04/16.04CentOS 7.1Mac OS X 10.11 alpha

明白來說,這是 alpha 版的建置,仍然需要社群的支持。

一個官方支援的「release」將會在之後到來。

 

什麼是可能的?

在我看來它是想要讓做到讓您可以管理任何事情在任何地方。或許您是一個 Unix 人,而有一些 Windows 的機器需要管理(不論本地或是在 Azure 上)。您可以在 Linux 使用 PowerShell 來做到。或許您有一些 bash 指令碼在您的公司與一些 PowerShell 指令碼。兩種可以交互使用。

如果您了解 PowerShell,您將也會有辦法在 Linux 上使用這些技巧。如果您管理一個混合的環境,PowerShell 不是 bash 的替代品而是另一個在您工具箱的工具。在 *nix 世界有許多 shell(不只是 bash、zsh,還有 ruby、python 等等),所以 PowerShell 將會一個優秀的夥伴。

PowerShell-2

 

相關連結

務必看看網路上的報導與許多不同觀點的部落格貼文!

 

祝您玩得愉快!這開源的東西是不是有點在 Microsoft 流行開來?

 

本文翻譯自 Announcing PowerShell on Linux – PowerShell is Open Source!

 


Visual Studio “15” Preview 4 釋出囉!

$
0
0

今天我們發佈了 Visual Studio “15” Preview 4,引進了很多新的改善與修復依些錯誤,讓我們朝產品的完整性又邁進了一步。

這次發佈的重點是幾乎所有的 VS 都會在新的安裝程式引擎上運行,讓安裝變得輕巧又快速些,並有較小的影響。最小的安裝大小少於 500 MB(比起先前的版本的 6GB)。還有一些「工作負載」還沒出現,包含 .NET Core 工具與 Azure 工具,但其他原有的 VS 2015 功能集是可以使用的。

New-Visual-Studio-Installer

更多有關新安裝程式的背景,之前兩篇文章程式與讓我們了負載。期待看到更多改進在我們釋出之前,包含支援自動部署、離線安裝與進一步的重構和組件化。

除了新的安裝程式之外,Preview 4 也包含了很多其他的改進。我們對最常用的Recent 清單與 News 摘要新增新的開始與建立的功能修補了起始頁面的體驗。而 C++ 也有了很大的改善在整個面板上。我們同時也在進行回饋系統的升級,試試 IDE 中回報問題的功能來看看我們做了什麼,並看看 developer community portal 的介面。

要瞭解這次版本的完整內容與一些已知的問題,可以看一下 Visual Studio “15” Preview 4 Release Notes

一些有關 Preview 4 重要的警告。第一,這是一個尚未支援的 preview,所以不要安裝它在您重要生產工作的機器上。第二,Preview 4 應該要與 Visual Studio 之前的版本並行,但您需要移除任何之前的 Visual Studio “15” Preview 的安裝,在開始新的安裝之前。如果有其他問題可以看看 Preview 4 FAQ

就如以往,我們歡迎您給予我們回饋。有什麼問題透過回報問題的選項來讓我們知道,不管是安裝程式的問題還是 Visual Studio IDE 本身。有什麼建議也可以透過 UserVoice 讓我們知道,感謝您!

 

本文翻譯自 Visual Studio “15″ Preview 4


VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

MSDN 論壇精選 ( 6/16 – 8/15 )

$
0
0

 

0616-0815 banner-01-01

MSDN 論壇  是一個可以讓開發人員自由提出問題、尋找資訊的好地方,歡迎大家多多利用,與社群中的同好們一同分享 Microsoft 技術資訊。我們會不定期整理論壇精選給大家,希望對您的學習有所幫助!以下為 2016 06/16 – 2016 08/15 的論壇精選,感謝 MSDN 小幫手的協助。本期論壇精選分為六大主題,搭配問題說明與相關影片,幫助大家更容易解決問題及蒐集資訊。


C# 本期熱門話題

是否已經有現成 Lambda Expression 轉換為 SQL 與參數的套件?自己做的話應該要一段時間功能才會穩定。

是否有方法可將多筆資料先預存在記憶體內,當需要的時候就直接取出,而非每次請求就必須選取一次資料庫又將資料一筆一筆寫入列表內的時間?

如何將硬體設備一個一個抓進來的值放進 LIST 之後再使用 PictureBox 抓值進來畫圖?

在處理的地方寫了建立登錄檔的一些資訊並且使用 DEBUG 跑都沒問題,但在安裝時卻不會出現、搜尋也搜尋不到。

做了一個按鈕讓它被執行時可生成 12 個 Label,請問如何能做另一個按鈕去改變剛剛生成的 Label 的 Text 值?

 

Channel 9 課程平台影片

C# 6.0 的新功能

 

 

 

Structural Query Language Development本期熱門話題

在 Win8 X86 安裝 SQL Server Reporting Services 2012 ,Reporting Services 組態設定時,點選報表伺服器 Web 服務 URL 卻出現錯誤。

兩個語法結果相同,但執行時在特定某個月份,語法 A 要等 1 分多鐘,語法 B 一下子就出來了。

 

 

ASP.NET 本期熱門話題

有沒有語法能明確指示 Model-View-Controller,僅把這個欄位作為「資料」而非「指令碼」加以包裝,如同 ADO.Net 的 Command parameter 的類似作法?

要在 FormView 內輸入資料 ( Dropdownlist ), 希望資料由其他 Database 資料帶入,需要如何寫才有辦法達到此目的呢?

 

Channel 9 課程平台影片

ASP.NET 5快速入門

ASP.NET MVC 5.1 新功能特色

如何使用 ASP.NET 發展的新技術打造現代化網站

 

 

Visual Studio 本期熱門話題

在 Excel VBA 上 Call Com 類別的 Function 只有 MSGBOX 有反應,其餘程式碼無動作。

在 Visual Studio 2008 的 .aspx.vb 頁內插入紅色中斷點後執行偵錯,程式執行到中斷點會停下來,用 Visual Studio 2015 中斷點無法產生效用。

電腦是 Win 10 版本,雖然 Visual Studio 還是能用,但後面很不穩定一直當掉修復也修復不了。

在 Data Grid View 一個儲存格內,如何同時放多個 Label、Button?

 

Channel 9 課程平台影片

Visual Studio 2015 新功能介紹

UWP 開發工具 Visual Studio 2015

使用 Visual Studio 來連接服務

 

Windows App 本期熱門話題

想控制使用者瀏覽到某一個 Page 時,按下右上角的 [x] 不能關閉 App ,或做一些其它的控制。

 

Channel 9 課程平台影片

簡介 Windows 10 通用 Windows 平台 (UWP)

只要10分鐘就能打造出你的App

 

 

.NET Framework 本期熱門話題

用一個函式隨機讀取 CSV 的任一行,該 CSV 有 4 萬多行,每一行都是 CRLF 結尾,總會在奇怪的行數 End Of Stream,都比檔案的行數小。

 

Channel 9 課程平台影片

.NET 2015 的新功能

.NET Framework 技術架構發展與 C# 6.0

 

 


欲觀看更多精彩課程請至>>Channel 9 免費課程平台

Visual Studio 最不為人所知的實用小秘訣

$
0
0

在我之前的貼文中有一則很酷的留言(多個中的一個,跟平常一樣留言 > 內文)。

Btw, “until I realized that the Solution Explorer tree nodes are searchable." This one is a saver

留言者 Sam 注意到在我文章中間有標註一句方案總管是可以文字搜尋的。在 Visual Studio 中的確有許多像這一樣的小竅門,甚至連經驗豐富的開發者有時候都會錯過。這種現象當然不僅限於 Visual Studio,是全部的軟體!人們每天都發現不明顯的 UX 在 Windows、OSX、iPhone。如果 UX 很簡單那任何事都會變得很直覺,但它並不簡單。

有一個有關 Microsoft Office 舊的笑話,其因為有功能而有名。

“Most of the exciting new Office features you discover have always been in Office." – Me and Everyone Else

下面是在 Visual Studio 中一些非常有用的東西(順帶一提,這是與使用的),而人們常常會錯過。

 

用 CTRL+; 來搜尋方案總管

您可以點選方案總管上方的文字方塊來搜尋所有的節點­ – 可看見的或隱藏的。或按「Ctrl + ;」。

useful-1

即使東西非常非常地深。結果檢視是篩選過的,而它會保持那樣直到您清除搜尋。

useful-2

 

快速啟動 – CTRL+Q

如果有一個功能是大家都應該用但沒有人用,那就是快速啟動了。有人告訴我內部遙測數據顯示快速啟動的使用率只有個位數或更低。

您知道您(我們)都在不斷從選單中挖掘東西嗎?大多數時候您就是用滑鼠點選工具…選項…然後盯著它看。

但您其實只要按 Ctrl+Q 並輸入。需要更改字體大小嗎?

useful-3

想要比較檔案?您知道 VS 有這個功能嗎?

useful-4

還是比用 NuGet Dialog 更快找到一個 NuGet 的套件?S
useful-5

答應我您會 Ctrl+Q 個幾天,看看您能不能養成習慣。您將會感謝您自己。

 

垂直卷軸使用地圖模式

我很喜歡展示給人看一些會讓他們驚豔的功能。是那種我也不知道為啥這裡會有這功能的類型。在快速啟動試試「地圖模式」並把它打開…然後到一個大的檔案看看您的捲軸。

useful-6

您的卷軸將會變成縮圖,讓您可以在上面滑動並用它來瀏覽您的檔案!

useful-7

 

索引標籤管理

大多數人管理他們的索引標籤就像下面這樣。

  • 開啟索引標籤
  • 重複
  • 宣告索引標籤破產
  • 關閉所有標籤
  • 回到 0

但您確實有「釘選索引標籤」與「預覽索引標籤」兩個功能。

useful-8

如果您釘選有用的標籤,就像在您的瀏覽器,這些標籤會停留在左邊並保持開啟。您不只是可以選擇「關閉所有文件」與「關閉本視窗以外的所有視窗」透過右鍵點選,還可以「關閉固定視窗以外的所有視窗」。

useful-9

此外,您不用總是要在方案總管中雙擊來查看檔案中的內容。因為那只是建立一個新的標籤,而且您可能很快就要關掉它。試試看點一下就好,或用鍵盤更好。您將會看到一個預覽的標籤出現在最右邊,而您將不會有超過一個的預覽標籤,這些標籤頁也不會把您的標籤清單給弄亂…除非您升級它們。

 

巡覽至 – Ctrl+,

Ctrl+, 絕對是實用工具榜上前幾名的東西。為什麼要到處移動您的滑鼠來打開檔案或找到一個特定的成員或函式呢?按下 Ctrl+, 開始輸入吧!它可以搜尋檔案、成員、類型…任何東西。而在您按 enter 之前,您可以使用鍵盤來瀏覽。

基本上沒有理由去方案總管裡面閒晃如果您已經知道您要看的項目的名字,用 Ctrl+, 真的快很多。

useful-10

 

用鍵盤來搬動程式碼

對我知道 Visual Studio 不是 Emacs 或 VIM(除非您 VsVim)但它確實有一點小小的竅門大多 VS 使用者並沒有使用。

您可以搬動程式碼透過按 Alt-上下箭頭。我從沒看過其他人用過除了我自己之外。您也可以 Shift-選取幾行程式碼然後 Alt-方向鍵來移動這個群組。

useful-11

您也可以透過 Alt 加上滑鼠拉選來做方塊選取,然後開始打字來一次再多行coding。

或許您之前就知道這些,或許您學過一些。我想重點是擁有五到十個實用的功能準備好在您的心中。這些是我的,那您的祕訣是什麼呢?

 

本文翻譯自 Visual Studio’s most useful(and underused)tips


同場加映:輸入法的設定

看完這篇文章在實作時,您可能會遇到一個問題,也就是 Ctrl+, 或 Ctrl+; 會打出全形的標點符號(,與;)而無法使用快捷鍵,就算按下 Shift 切換到英數還是會有一樣的問題。您需要的是新增一個英文的輸入法,目前在 Windows 內預設的只有微軟注音。您可以按照以下步驟來新增(以 win 10 為例):

  1. 到「設定」 > 「時間與語言」 > 「地區與語言」中點選新增語言。
    useful-12
  2. 在搜尋框上面打「English」後,點選英文並選擇美國。
    useful-13
  3. 設定好之後可以到下面相關設定中的「其他日期、時間及區域設定」> 「語言」 > 「進階設定」,若您希望預設輸入法變為英文,則可以在「覆寫預設輸入法」選擇英文。若您希望每個視窗的輸入法是獨立的,可以勾選「讓我為每個應用程式視窗設定不同的輸入法」,這樣您在工作時切換視窗就不用一直切換輸入法了。
    useful-14
  4. 都更改完畢後,現在只要按下 Alt+Shift 或是 Windows+空白鍵,您就可以切換微軟注音輸入法與英文輸入法囉!而使用英文輸入法就可以正常執行那些快捷鍵了。

另外或許您會常常不小心輕按到 Shift 就切換到輸入法,讓您覺得很困擾的話,您可以到「語言」裡面點選微軟注音的「選項」再點選輸入法底下的「選項」,到「進階」中就可以把 Shift 切換輸入法的功能關掉喔!
useful-15

 


VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

.NET 標準函式庫支援 Xamarin 囉!

$
0
0

今天我們非常開心可以發布 .NET 標準函式庫支援所有 Xamarin 的應用程式。這不僅包含建立與取用本地的 .NET 標準函式庫,還可以從 NuGet 直接新增 .NET 標準函式庫到您的 Xamarin 應用程式中。現在比起以前更容易在所有的 .NET 平台上分享程式碼,包含最近推出的 .NET Core 與 ASP.NET Core 平台。

 

什麼是 .NET 標準函式庫?

.NET 標準函式庫是 .NET API 的正式規範,適用於所有 .NET 執行階段。您可以把它看作是一個簡單但擴大的可攜式類別庫。這是一個單一的函式庫有統一的 API 給所有 .NET 平台包含 .NET Core。您就只是建立一個單一的 .NET 標準函式庫,並從任何支援 .NET 標準平台的執行階段中使用它。

std-1

 

取用 .NET Standard NuGets 與組件

很多的函式庫最近都新增了 .NET Standard 的支援,讓它們可以支援 .NET Core 的應用程式。現在可以新增 NuGet 到在 Xamarin Studio 與 Visual Studio中支援 .NET Standard的 Xamarin 應用程式。例如,這裡是支援 .NET Standard 1.6的 Windows Azure Storage preview 發佈:

std-2

就如您可以看到的,它 target 標準函式庫。當 NuGet 安裝後,Xamarin Studio 與 Visual Studio 就會新增參考到 netstandard 的資料夾:std-3

 

開始使用 .NET Standard

要在您的 Xamarin 應用程式建立或取用 .NET 標準函式庫,需要確認您是運行 Visual Studio 2015 Update 3 與更新 Xamarin 到 4.1.2 Stable release channel

在 Visual Studio 裡的檔案 > 新增 > 專案,選擇在「Visual C#」中的「類別庫(可移植到iOS、Android 及 Windows)」。

std-4

這個 PCL 現在需要升級來讓目標變為 .NET 標準函式庫,您可以在專案的 Properties 中找到。

std-5

這將會更改專案的類型與專案可以使用的 API。netstandard 目前涵蓋七個版本的 API。下面是一個有用的圖表,來指引您哪個平台支援哪些 API。這隨時可以在專案的 Properties 中調整,像是您可以如何更改一個 PCL 的 Profile 在建立之後。

std-6

最後,只要新增新的 .NET 標準函式庫到任何 Xamarin 專案就像其他的參考一樣。

macOS 上的 Xamarin Studio 建立 .NET 標準函式庫的功能將會在未來可以使用,但今天我們很高興釋出 Xamarin Studio 6.0.2,支援提取與編譯這些函式庫。

 

了解更多

關於 .NET 標準函式庫全面的解析,包含與 PCL 完整的比較,可以閱讀官方的 .NET

 

本文翻譯自 .NET Standard Library Support for Xamarin


 

VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

一覽 C# 7.0 中的新功能

$
0
0

以下要帶來的是所有在 C# 7.0 中計畫的語言功能介紹。有了 Visual Studio “15” Preview 4 的釋出,大多數的功能都將可以使用了。現在就是一個絕佳的時機來嚐嚐鮮並告訴我們您的想法!

C# 7.0 加入不少新的功能並注重在資料取用、簡化程式碼與效能。或許最棒的特性是 tuple,它讓有多返回值更加簡單,與模式匹配,簡化大量的條件程式碼。但還有很多其他大大小小的功能,我們希望它們全都可以結合來讓您的程式碼更加有效率與簡潔,並讓你工作起來更愉快更有生產力。請使用在 Visual Studio 視窗上方的「傳送意見反應」按鈕來告訴我們什麼東西運作不如您的預期,或您對於功能的改善有想法。仍然還有一些東西沒辦法完整的運作在 Preview 4。下面我要介紹的功能是當最終版本釋出時預計可以運行的,而在 Note 裡面所提到的則是尚未如預期運行的東西。我也會介紹一些更改的計畫 – 值得一提的是,有些結果是來自於各位的反饋! 有些功能可能會更動或消失在最終釋出的版本。

如果您好奇有關這些功能的設計過程,您可以看到很多設計的筆記與其他討論在 Roslyn GitHub site

享受 C# 7.0 的樂趣吧!Happy Hacking!

 

Out 變數

目前在 C# 使用 out 參數並不如我們想像中流暢。您要先宣告變數傳入才可以呼叫一個有 out 參數的方法。因為您通常不會初始化這些變數(畢竟它們之後也會被方法覆寫),所以您也不能用 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 變數宣告在它們裡面通常會引進到封閉的範圍。

Note:在 Preview 4,作用範圍的規定有更多限制:out 變數作用在它們宣告的陳述式中。因此,上面的例子並不能使用直到之後的版本釋出。

因為 out 變數直接宣告為對 out 參數的引數,編譯器通常可以區別它們的類型(除非有衝突的多載),所以是可以用 var 代替一個類型來定義它們:

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

一個常見的 out 參數使用就是 Try… 模式,會有一個布林的回傳值表示成功,而 out 參數將會攜帶所得到的結果:

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

Note:這裡的 i 只用在定義它的這個 if 陳述式中,所以 Preview 4 可以處理這種情況。

我們計畫允許「萬用字元」也可以當成 out 參數,用 * 表示,讓您可以忽略您不在乎的 out 參數:

p.GetCoordinates(out int x, out *); // I only care about x

Note:仍然未確定萬用字元會不會在 C# 7.0 版本中。

 

模式匹配

C# 7.0 引入模式的概念,抽象地說就是語法元素,能用來測試一個資料是否具有某種"型態",並在被運用的時候從值裏頭獲取的額外資訊。

在 C# 7.0 中模式的例子:

  • 常數模式,以 c 表示(在 C# 中 c 是常數的表達式),測試輸入是否等於 c
  • 類型模式,以 T x 表示(T 為類型而 x 為識別項),測試輸入是否為類型 T,如果是的話就把輸入的值丟入類型為 T 的變數 x 中。
  • Var 模式,以 var x 表示(x 為識別項<code),這種情況總是會匹配成功,所以就只是把輸入的值丟入類型與輸入相同的變數 x

這只是個開始 模式是一個新的語言元素種類在 C# 中,而我們期望未來能新增更多到 C# 裡。

在 C# 7.0 我們以模式增強了兩個現有的語言結構:

  • is 表達式現在可以有一個模式在右邊,而不是只是一個類型。
  • switch 陳述式中的 case 子句現在可以比對模式,而不只是常數值。

未來 C# 的版本我們可能會新增更多可以使用模式的地方。

 

使用模式的 is 表達式

此為使用常數模式和類型模式的 is 表達式範例:

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));
}

正如你所看見的,模式變數 – 由模式引入的變數,和先前描述的 out 變數相似,它們可以在表達式中間被宣告,而且可以被使用在最接近的周邊作用範圍之內。同時像 out 變數,模式變數是可變動的。

Note:就像 out 變數,嚴格的範圍規定適用於 Preview 4。

模式與 Try-方法常常很好一起使用:

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

 

使用模式的 switch 陳述式

我們一般化 switch 陳述式讓:

  • 您可以 switch 在任何類型(不只是原始物件類型)
  • 模式可以被用在 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 之前是重要的。此外,就像 catch 子句,編譯器將會幫助您放旗標在明顯不能匹配到的 case。在這之前您不能區別評估的順序,所以這不是一個重大改變的特性。
  • default 子句總是最後被評估:在上面的例子中即使 null case 在最後一個,可是它將會在 default 子句前檢查。這是為了現有 switch 語法的兼容性。然而,好的實作通常要你把 default 子句放在最後面。
  • null 子句在最後面並不會無法達到:這是因為類型模式依循目前 is 表達式的例子,而並不匹配 null。這確保 null 值不會不小心被任何類型的模式給搶走;您必須更清楚要如何處理它們(或留它們給 default 子句)。

被一個 case … 引進的模式變數:標籤僅在相對應的 switch 範圍內。

Tuples

想要從一個方法中回傳超過一個的值還蠻常見的。目前有的選項還不是最佳的:

  • out 參數:使用起來較為笨拙(即使有上述的改善),而且他們並不能用在非同步方法。
  • System.Tuple<…> 回傳類型:冗餘使用和請求一個 tuple 對象的分配。
  • 為每個方法訂製傳輸類型:對於一個類型會有很多程式碼的額外負荷,而目的只是要暫時聚集一些值。
  • 透過 dynamic 回傳類型回傳匿名類型:很高的性能開銷,而且沒有靜態類型的檢查。

為了要做得更好,C# 7.0 新增了 tuple 類型tuple literal

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

方法現在有效率地回傳三個字串,包成一個元素在一個 tuple 的值。

呼叫方法的函式現在將會收到一個 tuple,而可以取得每一個獨立的元素:

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

Item 1 等等為 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 literal:

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

一般來說可以给 tuple 類型分配一些彼此無關的名稱:只要各個元素是可分配的,tuple 類型就可以自由地轉換為其他的 tuple 類型。也有一些限制,特別是對 tuple literal,即常見的和警告錯誤,如不慎交換元素名稱的情況下,就會出現錯誤。

Note:這些限制還尚未被實作在 Preview 4中。

Tuple 為值類型,而它們的元素就只是公開的、可變動的欄位。它們有值相等,意思是說兩個 tuple 是相等的(而且有相同的 hash code)如果它們全部的元素都成對相等(而且有相同的 hash code)。

這讓 tuple 在多個回傳值之外的其他情況更有用。例如,如果您需要一個字典有多個鑰匙,使用 tuple 當您的鑰匙而一切都會進行得很順利。如果您需要一個清單有多個值在每個位置,使用 tuple 並搜尋清單等等,將會正確地運作。

Note:Tuple 依靠一組底層的類型,而這未包含在 Preview 4 中。為了讓功能可以使用,您可以從 NuGet 上取得它們:

  • 在方案總管中右鍵點選專案,並選擇「管理方案的 NuGet 套件…」
  • 選擇「瀏覽」頁面,勾選「包含搶鮮版」,並選擇「org」為「封裝來源」
  • 搜尋「ValueTuple」並安裝它

 

解構

另一個取用 tuple 的方式就是解構它們。解構宣告的語法是拆解 tuple(或其他值)成它裡面的部分,並個別指派那些部分到新的變數:

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

在解構宣告中您可以使用 var 在那些個別的變數上:

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

或甚至可以簡化為只放一個 var 在括號外面:

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

您也可以用解構賦值的方式解構到現有的變數:

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

解構並不是只有 tuple 可以用。任何類型都可以被解構,只要它有一個(實體或擴展)像下面格式的解構函式方法

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

out 參數構成的值從解構產生。

(為什麼使用 out 參數而不回傳 tuple呢?因為這樣您就可以有多個多載給不同數量的值)

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);

讓建構函式與解構函式像這樣「對稱」將會是一個常見的模式。

如同 out 變數,我們計畫要在解構允許「萬用字元」,對於那些您不在意的東西:

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

Note:仍然未確定萬用字元會不會在 C# 7.0 版本中。

 

區域函式

有時候一個輔助函式只在一個使用它的方法中有意義。您現在可以定義這樣的函式在其他函式裡面,作為一個區域函式

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);
    }
}

封閉區塊中的參數與區域變數可以在區域函式內使用,就像它們在匿名函式中一樣。

舉一個例子,迭代的方法實現通常需要一個非迭代的封裝方法(迭代器本身不啟動運行,直到 MoveNext 被呼叫)。區域函數非常適合這樣的情境:

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; }
        }
    }
}

如果 Iterator 是一個私用方法在 Filter 旁邊,它就能被其他成員不小心直接使用(沒有引數檢查)。此外,它也會需要拿所有與 Filter 一樣的引數,而不是只是有它們在作用範圍裡。

Note:在 Preview 4,區域函式必須宣告在它們被呼叫之前。這個限制將會鬆綁,只要它們讀取的區域變數一被確定指派,它們就可以被呼叫了。

 

Literal 改善

C# 7.0 允許 _ 在數字 literal 當作數字分隔器

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

您可以把它們放在任何您想要的位置,來加強可讀性。它們對於值並沒有影響。

此外,C# 7.0 引入二進位 literal,這樣您就可以直接指定,而不需要知道十六進位的表示方式。

var b = 0b1010_1011_1100_1101_1110_1111;

 

參考回傳與區域

就像您可以在 C# 傳東西 by reference(用 ref 修飾詞),您現在可以回傳它們 by reference,而且儲存它們 by reference 在區域變數。

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

這在傳遞 placeholder 到大的資料結構很有用。例如,遊戲可能會把它的資料放在一個預先分配的 struct 陣列中(避免垃圾收集暫停)。方法現在可以直接回傳參考到這樣一個 struct,透過呼叫者可以讀取或修改它。

有一些限制來確保這是安全的:

  • 您只可以回傳「安全回傳」的參考:一個是傳遞给你的引用,一個是指向對象中的引用。
  • Ref locals 被初始化為某一儲存位置,而且不能改變到指向另一個。

 

一般化非同步回傳類型

到目前為止,非同步方法在 C# 中必須回傳 voidTaskTask<T>。C# 7.0 允許其他類型被這樣定義,讓它們可以從非同步方法回傳。

例如我們計畫要有一個 ValueTask<T> 的 struct 類型。它被建置來預防 Task<T> 物件的配置,萬一非同步操作的結果在等待時已經可以取得。對於很多非同步的情境,比如以涉及緩衝為例,這可以大大减少分配的數量,並使性能有顯著地提升。

有許多其他方式您可以想像自訂「任務式」類型是很有用的。正確地建立它們並不直觀,所以我們並不期待大多數的人推出他們自己的,但他們是有可能開始出現在 framework 與 API 中,而呼叫者就可以只回傳與 await 他們今天做 Tasks 的方式。

Note:一般化非同步回傳類型還未在 Preview 4 可以使用。

 

更多表達式來作為成員本體

Expression bodied 方法、屬性等等在 C# 6.0 大受歡迎,但我們並沒有允許它們在各類成員。C# 7.0 新增存取子、建構函式與完成項到可以有 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
    }
}

Note:這些額外的 expression bodied 成員的種類還不能在 Preview 4 中使用。

這是一個由社群貢獻的功能的例子,而不是 Microsoft C# 編譯器團隊。耶!開源!

 

Throw 運算式

在一個運算式中擲回例外狀況很容易:只要呼叫一個方法來幫您做這件事。但在 C# 7.0,我們直接允許 throw 為一個運算式在特定的地方:

class Person
{
    public string Name { get; }
    public Person(string name) => Name = name ?? throw new ArgumentNullException(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();
}

Note:擲回例外狀況尚未可以運作在 Preview 4。

 

 

本文翻譯自 What’s New in C# 7.0

 


VS

若對以上技術及產品有任何問題,很樂意為您服務! 請洽:台灣微軟開發工具服務窗口 – MSDNTW@microsoft.com / 02-3725-3888 #4922

Viewing all 136 articles
Browse latest View live


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