Teams Toolkit for Visual Studio 现在可用了,这对于.NET开发者来说真是一个好消息。
本篇我们会介绍使用 ASP.NET Core 去构建一个 Teams 选项卡,并展示如何利用 Teams Toolkit for Visual Studio 去提升我们效率的步骤。


打开 Visual Studio,选择 Create a new project:

搜索关键字 teams 并选择 Microsoft Teams App,点击 Next 按钮:

填写项目名称并选择项目路径,点击 Create 按钮:

选择 Tab 作为应用类型,点击 Create 按钮:

项目创建好之后,右键点击该项目,选择 Teams Toolkit > Prepare Teams App Dependencies 并确保登录了我们的 Microsoft 365 账号
运行刚刚创建好的应用程序,可以看到认证和用户信息已经可用了:

@using Microsoft.Extensions.Configuration
@inject IConfiguration Configuration
<script src="https://unpkg.com/@@microsoft/mgt/dist/bundle/mgt-loader.js"></script>
<script>
mgt.Providers.globalProvider = new mgt.Msal2Provider({
clientId: "@Configuration["TeamsFx:Authentication:ClientId"]",
loginHint: "@User.Claims.FirstOrDefault(c => c.Type == "preferred_username")?.Value",
redirectUri: "/blank-auth-end.html",
loginType: mgt.LoginType.Popup,
authority: "@Configuration["TeamsFx:Authentication:OAuthAuthority"]"
});
</script>
"delegated": ["User.Read","User.ReadBasic.All","Calendars.Read","Files.Read","Files.Read.All","Sites.Read.All","Tasks.Read","Tasks.ReadWrite","People.Read","User.ReadBasic.All"]
<div>
<mgt-person person-query="me" view="twoLines"></mgt-person>
</div>
<div class="features">
<div class="header">
<div class="title">
<h2>One Productivity Hub</h2>
<div class="row">
<div class="column"><h3>Calendar events</h3></div>
<div class="column"><h3>To-do tasks</h3></div>
<div class="column"><h3>Files</h3></div>
</div>
</div>
</div>
<div class="row" id="content">
<div class="column" id="mgt-col"></div>
<div class="column" id="mgt-col"></div>
<div class="column" id="mgt-col"></div>
</div>
</div>
<mgt-agenda></mgt-agenda>
<mgt-todo></mgt-todo>
<mgt-file-list></mgt-file-list>
body,
#root > div {
background-color: #F3F2F1;
}
.features {
min-height: 80vh;
margin: 20px;
background-color: #FFF;
box-shadow: 0px 1.2px 3.6px rgba(0, 0, 0, 0.11), 0px 6.4px 14.4px rgba(0, 0, 0, 0.13);
border-radius: 4px;
font-family: 'Segoe UI', Tahoma, Geneva, Verdana, sans-serif;
}
.header {
display: flex;
background-color: #f0f0f0;
}
.title {
margin-top: 20px;
margin-left: 10px;
width: 100%;
}
.title h2 {
font-size: 24px;
padding-left: 5px;
display: inline;
font-weight: 600;
}
.title h3 {
float: left;
width: 33%;
background: transparent;
font-size: 16px;
margin-bottom: 10px;
padding-left: 10px;
padding-top: 10px;
color: #8A8886;
font-weight: 600;
}
mgt-person {
margin-top: 20px;
margin-left: 20px;
--avatar-size: 60px;
--font-family: 'Segoe UI';
--font-size: 20px;
--font-weight: 700;
--color: black;
--text-transform: none;
--line2-font-size: 14px;
--line2-font-weight: 400;
--line2-color: #8A8886;
--line2-text-transform: none;
}
#content, html, body {
height: 98%;
}
#mgt-col {
float: left;
width: 33%;
background: transparent;
height: 60vh;
overflow: hidden;
padding: 5px;
margin-top: 5px;
}
#mgt-col:hover {
overflow-y: auto;
}
