Updates from: 07/26/2024 02:59:50
Service Microsoft Docs article Related commit history on GitHub Change details
platform Meeting Apps Apis https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/apps-in-teams-meetings/meeting-apps-apis.md
The following are the TeamsJS v2 responses for Get user context API based on mee
"isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown",
- "loginHint": "v-prkamble@microsoft.com",
- "userPrincipalName": "v-prkamble@microsoft.com",
+ "loginHint": "user@microsoft.com",
+ "userPrincipalName": "user@microsoft.com",
"tenant": { "id": "72f988bf-86f1-41af-91ab-2d7cd011db47", "teamsSku": "enterprise"
The following are the TeamsJS v2 responses for Get user context API based on mee
"isCallingAllowed": null, "isPSTNCallingAllowed": null, "licenseType": "Unknown",
- "loginHint": "admin@M365x94626565.onmicrosoft.com",
- "userPrincipalName": "admin@M365x94626565.onmicrosoft.com",
+ "loginHint": "user@contoso.com",
+ "userPrincipalName": "user@contoso.com",
"tenant": { "id": "aa923623-ae61-49ee-b401-81f414b6ad5a", "teamsSku": "enterprise"
The following are the TeamsJS v2 responses for Get user context API based on mee
"team": null, "sharePointSite": { "teamSiteUrl": "",
- "teamSiteDomain": "m365x94626565.sharepoint.com",
+ "teamSiteDomain": "contoso.sharepoint.com",
"teamSitePath": "", "teamSiteId": null,
- "mySitePath": "/personal/admin_m365x94626565_onmicrosoft_com",
- "mySiteDomain": "m365x94626565-my.sharepoint.com"
+ "mySitePath": "/personal/contoso_microsoft_com",
+ "mySiteDomain": "contoso-my.sharepoint.com"
} }
The following are the TeamsJS v2 responses for Get user context API based on mee
"user": { "id": "4ebcc4d0-291b-4154-a85f-a89cd77aefa8", "licenseType": "Unknown",
- "loginHint": "admin@M365x654992.onmicrosoft.com",
- "userPrincipalName": "admin@M365x654992.onmicrosoft.com",
+ "loginHint": "user@contoso.com",
+ "userPrincipalName": "user@contoso.com",
"tenant": { "id": "36a708ef-700d-4d60-9de0-0a5f7b7693df", "teamsSku": "unknown"
The following are the TeamsJS v2 responses for Get user context API based on mee
}, "sharePointSite": { "teamSiteUrl": "",
- "teamSiteDomain": "m365x654992.sharepoint.com",
+ "teamSiteDomain": "contoso.sharepoint.com",
"teamSitePath": "",
- "mySitePath": "/personal/admin_m365x654992_onmicrosoft_com",
- "mySiteDomain": "m365x654992-my.sharepoint.com"
+ "mySitePath": "/personal/contoso_microsoft_com",
+ "mySiteDomain": "contoso-my.sharepoint.com"
} } ```
The following are the TeamsJS v2 responses for Get user context API based on mee
"isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown",
- "loginHint": "v-prkamble@microsoft.com",
- "userPrincipalName": "v-prkamble@microsoft.com",
+ "loginHint": "user@microsoft.com",
+ "userPrincipalName": "user@microsoft.com",
"tenant": { "id": "72f988bf-86f1-41af-91ab-2d7cd011db47", "teamsSku": "enterprise"
The following are the TeamsJS v2 responses for Get user context API based on mee
"teamSiteDomain": "microsoft.sharepoint.com", "teamSitePath": "", "teamSiteId": undefined,
- "mySitePath": "/personal/v-prkamble_microsoft_com",
+ "mySitePath": "/personal/user_microsoft_com",
"mySiteDomain": "microsoft-my.sharepoint.com" } }
The following are the TeamsJS v2 responses for Get user context API based on mee
"id": "aeee11b1-7838-4b4a-8064-12ce5b01258f", "displayName": "", "licenseType": "Unknown",
- "loginHint": "v-hrajandira@microsoft.com",
- "userPrincipalName": "v-hrajandira@microsoft.com",
+ "loginHint": "user@microsoft.com",
+ "userPrincipalName": "user@microsoft.com",
"tenant": { "id": "72f988bf-86f1-41af-91ab-2d7cd011db47", "teamsSku": "enterprise"
The following are the TeamsJS v2 responses for Get user context API based on mee
"isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown",
- "loginHint": "admin@M365x94626565.onmicrosoft.com",
- "userPrincipalName": "admin@M365x94626565.onmicrosoft.com",
+ "loginHint": "user@microsoft.com",
+ "userPrincipalName": "user@microsoft.com",
"tenant": { "id": "aa923623-ae61-49ee-b401-81f414b6ad5a", "teamsSku": "unknown"
The following are the TeamsJS v2 responses for Get user context API based on mee
"team": undefined, "sharePointSite": { "teamSiteUrl": undefined,
- "teamSiteDomain": "m365x94626565.sharepoint.com",
+ "teamSiteDomain": "microsoft.sharepoint.com",
"teamSitePath": undefined, "teamSiteId": undefined, "mySitePath": undefined,
The following are the TeamsJS v2 responses for Get user context API based on mee
"isCallingAllowed": undefined, "isPSTNCallingAllowed": undefined, "licenseType": "Unknown",
- "loginHint": "admin@M365x94626565.onmicrosoft.com",
- "userPrincipalName": "admin@M365x94626565.onmicrosoft.com",
+ "loginHint": "user@microsoft.com",
+ "userPrincipalName": "user@microsoft.com",
"tenant": { "id": "aa923623-ae61-49ee-b401-81f414b6ad5a", "teamsSku": "unknown"
The following are the TeamsJS v2 responses for Get user context API based on mee
"team": undefined, "sharePointSite": { "teamSiteUrl": undefined,
- "teamSiteDomain": "m365x94626565.sharepoint.com",
+ "teamSiteDomain": "microsoft.sharepoint.com",
"teamSitePath": undefined, "teamSiteId": undefined, "mySitePath": undefined,
platform Content Security Policy Headers https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/tabs/content-security-policy-headers.md
| **Microsoft 365 app host** | **frame-ancestor permission** |
-|--|--|
-| *All hosts* (New) | `*.cloud.microsoft` |
+| | |
+| All hosts (New) | `*.cloud.microsoft` |
| Teams | `teams.microsoft.com`, `*.teams.microsoft.com` | | Microsoft 365 app | `*.microsoft365.com`, `*.office.com`, | | Outlook | `outlook.office.com`, `outlook.office365.com`, `outlook-sdf.office.com`, `outlook-sdf.office365.com` |-
-```http
-https://*.cloud.microsoft https://teams.microsoft.com https://*.teams.microsoft.com https://*.microsoft365.com https://*.office.com
-```
-
-> [!WARNING]
-> Microsoft's cloud services, including web versions of Teams, Outlook and Microsoft 365 domains are migrating to the *cloud.microsoft* domain. Perform the following steps before September 2024 to ensure your app continues to render on supported Microsoft 365 web client hosts:
->
-> 1. Update TeamsJS library to v.2.19.0 or higher. For more information about the latest release of TeamsJS, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js).
->
-> 2. Update your Teams app's [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) header [*frame-ancestors*](https://developer.mozilla.org/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) directive to allow your app to be hosted by the ****.cloud.microsoft*** domain. This ensures that your app continues to work across existing and future Microsoft 365 host applications and minimizes the need for subsequent changes.
platform Ocdi Warning https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/includes/tabs/ocdi-warning.md
+> [!WARNING]
+> Microsoft's cloud services, including web versions of Teams, Outlook, and Microsoft 365 domains, are migrating to the `*.cloud.microsoft` domain. Perform the following steps before September 2024 to ensure your app continues to render on supported Microsoft 365 web client hosts:
+>
+> 1. Update TeamsJS library to v.2.19.0 or later. For more information about the latest release of TeamsJS, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js).
+>
+> 2. If you've defined [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) (CSP) headers for your app, update the [frame-ancestors](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors) directive to include the `*.cloud.microsoft` domain. To ensure backward compatibility during the migration, retain the existing `frame-ancestors` values in your CSP headers. This approach ensures that your app continues to work across both existing and future Microsoft 365 host applications and minimizes the need for subsequent changes.
+>
+> Update the following domain in the `frame-ancestors` directive of your app's CSP headers:
+>
+> ```http
+> https://*.cloud.microsoft
+> ```
platform Extend M365 Teams Personal Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/m365-apps/extend-m365-teams-personal-tab.md
If your app makes use of [Content Security Policy](https://developer.mozilla.org
[!INCLUDE [CSP headers for multi-hub apps](~/includes/tabs/content-security-policy-headers.md)] + <a name='update-azure-ad-app-registration-for-sso'></a> ## Update Microsoft Entra app registration for SSO
platform High Quality Message Extension https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/messaging-extensions/high-quality-message-extension.md
Message extensions respond to a user input with an Adaptive Card. An Adaptive Ca
* If a user can change any information on the card through dialog, Stageview, or directly from the card, we recommend the Adaptive Card to support universal actions and automatic refresh. [*Recommended*] * Adaptive Cards must include a URL as part of the [metadata](https://adaptivecards.io/explorer/Metadata.html), which allows cards to be easily copied from one hub to another. [*Recommended*] * Apart from thumbnails, any image in an Adaptive Card must have an alt-text. [*Recommended*]
-* If a user can change any information on the card through dialog, Stageview, or directly from the card, we recommend the Adaptive Card to support universal actions and automatic refresh. [*Recommended*]
-* Adaptive Cards must include a URL as part of the [metadata](https://adaptivecards.io/explorer/Metadata.html), which allows cards to be easily copied from one hub to another. [*Recommended*]
-* Apart from thumbnails, any image in an Adaptive Card must have an alt-text. [*Recommended*]
## Extend your plugin to Copilot in meetings
platform Manifest Schema https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/resources/schema/manifest-schema.md
Provide your Microsoft Entra App ID and Microsoft Graph information to help user
|Name| Type| Maximum size | Required | Description| |||||| |`id`|String||✔️|Microsoft Entra application ID of the app. This ID must be a GUID.|
-|`resource`|String|2048 characters||Resource URL of app for acquiring auth token for SSO. </br> **NOTE:** If you aren't using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, `https://example` to avoid an error response. |
+|`resource`|String|2048 characters||Resource URL of app for acquiring auth token for SSO. </br> **NOTE:** If you aren't using SSO, ensure that you enter a dummy string value in this field to your app manifest, for example, `https://example` to avoid an error response. The dummy URL string value mustn't contain domains or URLs that aren't in your control, either directly or through wildcards. For example, `yourapp.onmicrosoft.com` is valid, but `*.onmicrosoft.com` isn't valid. The top-level domains are prohibited, for example, `*.com`, `*.org`. |
## graphConnector
platform Integrating Web Apps https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/samples/integrating-web-apps.md
-description: Learn best practices or considerations for integrating existing web apps with Teams, API requirements, authentication, and deep-linking of your app with Teams.
+description: Learn best practices or considerations for integrating existing web apps with Teams, API requirements, authentication, and deep linking of your app with Teams.
Last updated 04/02/2023 ms.localizationpriority: medium
Title: Considerations for Teams integration
# Considerations for Teams integration
-You can make web apps suitable with Teams' social and collaborative features, by properly integrating them with Teams.
+You can make web apps suitable with Microsoft Teams' social and collaborative features, by properly integrating them with Teams.
The different types of apps, which you can integrate with Teams are as follows: * **Standalone apps**: A standalone app is a single-page or large, and complex app. The user can use some aspects of it in Teams. * **Collaboration apps**: An app already built for the social and collaborative features inherent to Teams.
-* **SharePoint**: A SharePoint page you want to surface in Teams.
+* **Microsoft SharePoint**: A SharePoint page you want to surface in Teams.
You can map and follow the appropriate guideline applicable to your integration scenario.
-This document gives an overview of Teams capabilities, share-point requirements for file and data storage, API requirements, authentication, and deep-linking of your app with Teams.
+This document gives an overview of Teams capabilities, SharePoint requirements for file and data storage, API requirements, authentication, and deep linking of your app with Teams.
## Get to know Teams platform capabilities
platform Create Channel Group Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-channel-group-tab.md
You've completed the tutorial to build a tab app with Blazor.
> > To migrate your configurable tab to static tab, use the app manifest v1.16 or later.
-Static tab capability is extended to support group chat, channels, and meetings. In static tabs, there is no configuration dialog, enabling users to pin the tab instantly. You have the option to configure your tab after it's pinned, as the `setConfig` APIs allow you to modify the `contentUrl`, which can be useful to change the landing page if needed. You can update your existing configurable tab to a static tab and add different scopes to the static tab.
+Static tab capability is extended to support group chat, channels, and meetings. In static tabs, there's no configuration dialog, enabling users to pin the tab instantly. You have the option to configure your tab after it's pinned, as the `setConfig` APIs allow you to modify the `contentUrl`, which can be useful to change the landing page if needed. When you declare multiple static tabs in the manifest and add the app in the channel scope, only the first tab listed in the manifest appears.
-To change your configurable tab to static tab:
+You can update your existing configurable tab to a static tab and add different scopes to the static tab. To change your configurable tab to static tab:
1. Move your configuration logic out of your `configurationUrl` code space to your `contentUrl` code space. 1. Add the `staticTabs` property to your [app manifest](~/resources/schem#statictabs) with `scopes` and `context` parameters. Following is an example of app manifest where a static tab is defined that works in all scopes and contexts in Teams:
platform Create Personal Tab https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/create-personal-tab.md
After your tab is uploaded to Microsoft Teams through **ngrok** and successfully
1. In the left pane of Teams, select ellipses &#x25CF;&#x25CF;&#x25CF; and then choose your uploaded app to view your personal tab.
- Your personal tab is successfully created and added in Teams.You can also [reorder](#reorder-static-personal-tabs) your personal tab in Teams.
+ Your personal tab is successfully created and added in Teams. You can also [reorder](#reorder-static-personal-tabs) your personal tab in Teams.
::: zone-end
ngrok http 3978 --host-header=localhost
:::image type="content" source="~/assets/images/tab-images/personaltabaspnetmvccoreuploaded.png" alt-text="Personal tab":::
- Your personal tab is successfully created and added in Teams.You can also [reorder](#reorder-static-personal-tabs) your personal tab in Teams.
+ Your personal tab is successfully created and added in Teams. You can also [reorder](#reorder-static-personal-tabs) your personal tab in Teams.
::: zone-end
ngrok http 3978 --host-header=localhost
Blazor lets you build interactive web UIs using C#, instead of JavaScript. You can create a tab app and a bot app with Blazor and the latest version of Visual Studio. > [!NOTE] > Teams Toolkit doesn't support the message extension capability.
If you create a bot with a **personal** scope, it appears in the first tab posit
You can extend static tabs to group chat, channels, and meetings. Instead of pinned app content, you can build tabs that behave more like apps as you can pin only one tab per app, for example, pinning a single YouTube app tab.
-To extend your static tabs to group chat, channels, and meetings, update your [app manifest](~/resources/schem#statictabs) with the `scopes` and `context` parameters in the `staticTabs` property.
+To extend your static tabs to group chat, channels, and meetings, update your [app manifest](~/resources/schem#statictabs) with the `scopes` and `context` parameters in the `staticTabs` property. When you declare multiple static tabs in the manifest and add the app in the channel scope, only the first tab listed in the manifest appears.
Following is an example of app manifest where a static tab is defined that works in all scopes and contexts in Teams:
platform Tab Requirements https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/tabs/how-to/tab-requirements.md
Ensure that you adhere to the following prerequisites while building your Teams
[!INCLUDE [CSP headers for multi-hub apps](~/includes/tabs/content-security-policy-headers.md)]
+ [!INCLUDE [ocdi-warning](../../includes/tabs/ocdi-warning.md)]
+ > [!NOTE] > To host the other Teams or Microsoft 365 apps within your app, upgrade your app to a [Microsoft 365 environment](~/m365-apps/overview.md). If you manage the app running in the nested frame, you can update its code to initialize the SDK by specifying your domain. This allows your nested frame to act as a proxy to Teams.
platform Invoking Task Modules https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/invoking-task-modules.md
The next section provides examples of embedding dialogs in a YouTube video and a
HTML or JavaScript-based dialogs have access to the entire area of the dialog below the header. While that offers a great deal of flexibility, if you want padding around the edges to align with the header elements and avoid unnecessary scroll bars, you must specify the CSS.
-> [!WARNING]
-> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client:
->
-> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js).
->
-> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains.
Here are a few examples of common use cases.
platform Task Modules Bots https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-bots.md
There are two ways of invoking dialogs:
When the `value` object of the `invoke` card action or `Action.Submit` is initialized and when a user selects the button, an `invoke` message is sent to the bot. In the HTTP response to the `invoke` message, there's a [TaskInfo object](~/task-modules-and-cards/task-modules/invoking-task-modules.md#dialoginfo-object) embedded in a wrapper object, which Teams uses to display the dialog (referred as task module in TeamsJS v1.x).
-> [!WARNING]
-> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client:
->
-> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js).
->
-> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains.
:::image type="content" source="../../assets/images/task-module/task-module-invoke-request-response.png" alt-text="task/fetch request or response":::
platform Task Modules Tabs https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/task-modules-and-cards/task-modules/task-modules-tabs.md
You can invoke either an HTML or Adaptive Card dialog from a tab.
The value of `UrlDialogInfo.url` is set to the location of the content of your dialog. The dialog window opens and `UrlDialogInfo.url` is loaded as an `<iframe>` inside it. JavaScript in the dialog page calls `microsoftTeams.app.initialize()`. If there's a `submitHandler` function on the page and there's an error when invoking `microsoftTeams.dialog.url.open()`, then `submitHandler` is invoked with `err` set to the error string indicating the same.
-> [!WARNING]
-> Microsoft's cloud services, including web versions of Teams (*teams.microsoft.com*), Outlook (*outlook.com*), and Microsoft 365 (*microsoft365.com*) domains are migrating to the *cloud.microsoft* domain. Perform the following steps before June 2024 to ensure your app continues to render on the Teams web client:
->
-> 1. Update TeamsJS SDK to v.2.19.0 or higher. For more information about the latest release of TeamsJS SDK, see [Microsoft Teams JavaScript client library](https://www.npmjs.com/package/@microsoft/teams-js).
->
-> 2. Update your [Content Security Policy](https://developer.mozilla.org/en-US/docs/Web/HTTP/CSP) headers in your Teams app to allow your app to access the ***teams.cloud.microsoft*** domain. If your Teams app extends across Outlook and Microsoft 365, ensure you allow your app to access ***teams.cloud.microsoft***, ***outlook.cloud.microsoft***, and ***m365.cloud.microsoft*** domains.
### Adaptive Card dialog
platform Teams Toolkit Migration Guide https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/toolkit/teams-toolkit-migration-guide.md
+
+ Title: Migrate Teams Toolkit project from 17.9 to 17.10+ version
+
+description: This guide provides the steps to migrate from scaffolded template to the new project structure in Microsoft Teams using Teams Toolkit.
+
+ms.localizationpriority: medium
+ Last updated : 06/05/2024++
+# Migrate Teams Toolkit project from 17.9 to 17.10+ version
+
+This guide details the process of migrating from the traditional, scaffolded template to the new project structure in Microsoft Teams. The transition is essential to use the latest features and improve project maintainability. The new project structure introduces a more streamlined and efficient way of managing your Teams applications through `.ttkproj` file to represent the new project type.
+
+In the new Teams Toolkit version 17.10, a Teams solution contains two projects, Teams project and your source code.
+
+- **Teams project**: Teams project contains the Teams app package and Teams Toolkit configuration files.
+- **Source code**: Your source code project is the business logic for your tab, bot, or others.
+
+The separation of Teams project and source code allows the integration of existing web or bot solutions into Teams. This approach simplifies the process of integrating any existing project or solution with Teams.
+
+## Prerequisites
+
+Before starting the migration process, ensure that you have the following:
+
+* A Teams project that is created using Teams Toolkit for Visual Studio 17.9 or earlier version.
+* Visual Studio version 17.10 Preview 3 or later.
+* Multiple startups feature. To enable multiple startups, go to **Tools** > **Options** > **Preview Feature** > **Enable Multi-Project Launch Profiles**.
+
+## Migration process
+
+Perform the following steps to migrate to the new project structure:
+
+1. In your Teams project folder where you have the Visual Studio solution file, create a new folder. This folder is named and referred as **TeamsApp** in the subsequent steps.
+
+1. Create a **TeamsApp.ttkproj** file in the **TeamsApp** folderand the project file name must match the new folder name. Add the following code to the **TeamsApp.ttkproj** file:
+
+ ```xml
+ <?xml version="1.0" encoding="utf-8"?>
+ <Project ToolsVersion="15.0" Sdk="Microsoft.TeamsFx.Sdk">
+ <ItemGroup>
+ <ProjectCapability Include="ProjectConfigurationsDeclaredDimensions" />
+ </ItemGroup>
+ </Project>
+ ```
+
+1. Remove the following configuration folders and files from your project folder and add them in the **TeamsApp** folder.
+
+ * Folders: `appPackage`, `env`, `infra`
+ * Files: `teamsapp.yml`, `teamsapp.local.yml`, `aad.manifest.json`
+
+ > [!NOTE]
+ > Once the folders and files are moved, they are automatically included in your **TeamsApp.ttkproj** file and you don't need to add them to the **TeamsApp.ttkproj** manually.
+
+1. According to your `launchSettings.json`, move the launching browser or test tool capability to `launchSettings.json` of the **TeamsApp** folder.
+
+ * Create a `launchSettings.json` file in the **TeamsApp** folder. Add the contents of the file `launchSettings.json` of your project folder to the newly created `launchSettings.json` in the **TeamsApp** folder.
+ * In the newly created `launchSettings.json` of the **TeamsApp** folder, delete the `dotnetRunMessages`, `launchBrowser`, `applicationUrl`, `environmentVariables`, and `hotReloadProfile` fields.
+ * In the `launchSettings.json` of your project folder, delete the `launchBrowser`, `launchTestTool`, and `launchUrl` fields and duplicated profiles.
+
+ > [!NOTE]
+ >
+ > * The `launchSettings.json` of your project must start by itself.
+ > * The `launchSettings.json` of the **TeamsApp** folder is configured to launch the browser or the test tool app that communicates with your project.
+
+1. Open the solution file using Visual Studio version 17.10 Preview 3 or later and add the new project `TeamsApp.ttkproj` from **TeamsApp** folder to the solution file in Visual Studio.
+
+1. Remove `<ProjectCapability Include="TeamsFx"/>` in your project.
+
+1. Create a `{{solutionName}}.slnLaunch.user` file. You can create this file either through VS or manually.
+
+ # [Visual Studio](#tab/channel-meeting)
+
+ 1. Right-click the solution and select **Configure Startup Projects...**.
+ 1. Select **Multiple start projects** and add more profiles that start the **TeamsApp** and your project simultaneously. You can rename the profiles as required.
+ 1. Select **OK**. The `{{solutionName}}.slnLaunch.user` file is automatically saved in the solution folder.
+
+ # [Manually](#tab/manually)
+
+ Create a `{{solutionName}}.slnLaunch.user` file at the same level as the solution file and add the content according to the files of `launchSettings.json`.
+
+ ```json
+ [
+ {
+ "Name": "Microsoft Teams (browser)",
+ "Projects": [
+ {
+ "Path": "TeamsApp\\TeamsApp.ttkproj",
+ "Action": "StartWithoutDebugging",
+ "DebugTarget": "Microsoft Teams (browser)"
+ },
+ {
+ "Path": "MyTeamsApp8\\MyTeamsApp8.csproj",
+ "Action": "Start",
+ "DebugTarget": "Start Project"
+ }
+ ]
+ }
+ ]
+ ```
+
+ > [!NOTE]
+ >
+ > The `{{solutionName}}.slnLaunch.user` file specifies which projects to launch and their respective startup configurations. You can define groups of projects that you want to start simultaneously. Ensure that the `DebugTarget` corresponds exactly to the profile names in the `launchSettings.json`.
+
+
+
+1. Modify the `teamsapp.local.yml` and `teamsapp.yml` files in the **TeamsApp** folder.
+1. Every action that changes your project must be updated because the path is updated. Focus on the following actions:
+
+ * `uses: file/createOrUpdateJsonFile`: This action might change the `appSettings.json` file of your project to configure runtime environments. Update the `target` field to the correct path.
+ > [!IMPORTANT]
+ > You don't need to modify `launchSettings.json` using `file/createOrUpdateJsonFile`. If present in `teamsapp.local.yml`, remove it.
+ * `uses: cli/runDotnetCommand`: This action executes a `.NET` command within your project to package it. Adjust the `workingDirectory` field to the new path and update the command string with the correct `.csproj` path.
+ * `uses: azureAppService/zipDeploy`: This action deploys the packaged file remotely. Update the `workingDirectory` field to the correct path.
+
+ HereΓÇÖs an example of how to modify the YAML configurations:
+
+ ```yml
+ # For example:
+ # Generate runtime appsettings to JSON file
+ - uses: file/createOrUpdateJsonFile
+ with:
+ target: ../MyTeamsApp8/appsettings.Development.json
+ content:
+ TeamsFx:
+ Authentication:
+ ClientId: ${{AAD_APP_CLIENT_ID}}
+ ClientSecret: ${{SECRET_AAD_APP_CLIENT_SECRET}}
+ InitiateLoginEndpoint: ${{TAB_ENDPOINT}}/auth-start.html
+ OAuthAuthority: ${{AAD_APP_OAUTH_AUTHORITY}}
+
+ # Triggered when 'teamsapp deploy' is executed
+ deploy:
+ - uses: cli/runDotnetCommand
+ with:
+ args: publish --configuration Release MyTeamsApp8.csproj
+ workingDirectory: ../MyTeamsApp8
+
+ # Deploy your application to Azure App Service using the zip deploy feature.
+ # For additional details, refer to https://aka.ms/zip-deploy-to-app-services.
+ - uses: azureAppService/zipDeploy
+ with:
+ # Deploy base folder
+ artifactFolder: bin/Release/net8.0/publish
+ # The resource id of the cloud resource to be deployed to.
+ # This key will be generated by arm/deploy action automatically.
+ # You can replace it with your existing Azure Resource id
+ # or add it to your environment variable file.
+ resourceId: ${{TAB_AZURE_APP_SERVICE_RESOURCE_ID}}
+ workingDirectory: ../MyTeamsApp8
+
+ ```
+
+ > [!NOTE]
+ > We recomment that you provision and deploy on the new project folder to test the app.
+
+1. Close the solution and ensure all changes are saved.
+
+You've successfully migrated your project and your folder structure is updated as follows:
+
+##### Folder Structure
+
+# [New structure](#tab/new)
++
+# [Old structure](#tab/old)
++++
+##### Project Type File
+
+# [New project type file](#tab/new)
+
+This file extension is **.ttkproj**.
+
+```xml
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="15.0" Sdk="Microsoft.TeamsFx.Sdk">
+ <PropertyGroup Label="Globals">
+ <ProjectGuid>f05bbd29-f3bc-4bb8-8f1f-842235db6b49</ProjectGuid>
+ </PropertyGroup>
+ <ItemGroup>
+ <ProjectCapability Include="ProjectConfigurationsDeclaredDimensions" />
+ </ItemGroup>
+</Project>
+```
+
+# [Old project type file](#tab/old)
+
+None
+++
+##### LaunchSettings.json
+
+# [New launchSettings.json](#tab/new)
+
+The following code is the sample of the C# project:
+
+```json
+{
+ "profiles": {
+ "Start Project": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "applicationUrl": "https://localhost:44302;http://localhost:2544",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "hotReloadProfile": "aspnetcore"
+ }
+ }
+}
+```
+
+The following code is the sample of TeamsApp project:
+
+```json
+{
+ "profiles": {
+ // Debug project within Teams
+ "Microsoft Teams (browser)": {
+ "commandName": "Project",
+ "launchUrl": "https://teams.microsoft.com/l/app/${{TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ },
+ // Debug project within Microsoft 365
+ "Microsoft 365 app (browser)": {
+ "commandName": "Project",
+ "launchUrl": "https://www.office.com/m365apps/${{M365_APP_ID}}?auth=2&login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ },
+ // Debug project within Outlook
+ "Outlook (browser)": {
+ "commandName": "Project",
+ "launchUrl": "https://outlook.office.com/host/${{M365_APP_ID}}?login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ }
+ }
+}
+```
+
+# [Old launchSettings.json](#tab/old)
+
+```json
+{
+ "profiles": {
+ // Debug project within Teams
+ "Microsoft Teams (browser)": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "https://teams.microsoft.com/l/app/${{TEAMS_APP_ID}}?installAppPackage=true&webjoin=true&appTenantId=${{TEAMS_APP_TENANT_ID}}&login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ "applicationUrl": "https://localhost:44302;http://localhost:2544",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "hotReloadProfile": "aspnetcore"
+ },
+ "Microsoft 365 app (browser)": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "https://www.office.com/m365apps/${{M365_APP_ID}}?auth=2&login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ "applicationUrl": "https://localhost:44302;http://localhost:2544",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "hotReloadProfile": "aspnetcore"
+ },
+ "Outlook (browser)": {
+ "commandName": "Project",
+ "dotnetRunMessages": true,
+ "launchBrowser": true,
+ "launchUrl": "https://outlook.office.com/host/${{M365_APP_ID}}?login_hint=${{TEAMSFX_M365_USER_NAME}}",
+ "applicationUrl": "https://localhost:44302;http://localhost:2544",
+ "environmentVariables": {
+ "ASPNETCORE_ENVIRONMENT": "Development"
+ },
+ "hotReloadProfile": "aspnetcore"
+ }
+ //// Uncomment following profile to debug project only (without launching Teams)
+ //,
+ //"Start Project (not in Teams)": {
+ // "commandName": "Project",
+ // "dotnetRunMessages": true,
+ // "launchBrowser": true,
+ // "applicationUrl": "https://localhost:44302;http://localhost:2544",
+ // "environmentVariables": {
+ // "ASPNETCORE_ENVIRONMENT": "Development"
+ // },
+ // "hotReloadProfile": "aspnetcore"
+ //}
+ }
+}
+```
+++
+##### Teams app YAML File
+
+# [New structure](#tab/new)
+
+The following code is the sample of teamapp.local.yml:
+
+```yml
+# Generate runtime appsettings to JSON file
+ - uses: file/createOrUpdateJsonFile
+ with:
+ target: ../MyTeamsApp8/appsettings.Development.json
+ content:
+ TeamsFx:
+ Authentication:
+ ClientId: ${{AAD_APP_CLIENT_ID}}
+ ClientSecret: ${{SECRET_AAD_APP_CLIENT_SECRET}}
+ InitiateLoginEndpoint: ${{TAB_ENDPOINT}}/auth-start.html
+ OAuthAuthority: ${{AAD_APP_OAUTH_AUTHORITY}}
+
+```
+
+The following code is the sample of teamapp.yml:
+
+```yml
+# Triggered when 'teamsapp deploy' is executed
+deploy:
+ - uses: cli/runDotnetCommand
+ with:
+ args: publish --configuration Release MyTeamsApp8.csproj
+ workingDirectory: ../MyTeamsApp8
+ # Deploy your application to Azure App Service using the zip deploy feature.
+ # For additional details, refer to https://aka.ms/zip-deploy-to-app-services.
+ - uses: azureAppService/zipDeploy
+ with:
+ # Deploy base folder
+ artifactFolder: bin/Release/net8.0/publish
+ # The resource id of the cloud resource to be deployed to.
+ # This key will be generated by arm/deploy action automatically.
+ # You can replace it with your existing Azure Resource id
+ # or add it to your environment variable file.
+ resourceId: ${{TAB_AZURE_APP_SERVICE_RESOURCE_ID}}
+ workingDirectory: ../MyTeamsApp8
+```
+
+# [Old structure](#tab/old)
+
+The following code is the sample of teamapp.local.yml:
+
+```yml
+# Generate runtime appsettings to JSON file
+ - uses: file/createOrUpdateJsonFile
+ with:
+ target: ./appsettings.Development.json
+ content:
+ TeamsFx:
+ Authentication:
+ ClientId: ${{AAD_APP_CLIENT_ID}}
+ ClientSecret: ${{SECRET_AAD_APP_CLIENT_SECRET}}
+ InitiateLoginEndpoint: ${{TAB_ENDPOINT}}/auth-start.html
+ OAuthAuthority: ${{AAD_APP_OAUTH_AUTHORITY}}
+
+......
+
+ # Create or update debug profile in lauchsettings file
+ - uses: file/createOrUpdateJsonFile
+ with:
+ target: ./Properties/launchSettings.json
+ content:
+ profiles:
+ Microsoft Teams (browser):
+ commandName: "Project"
+ dotnetRunMessages: true
+ launchBrowser: true
+ launchUrl: "https://teams.microsoft.com/l/app/$?installAppPackage=true&webjoin=true&appTenantId=$&login_hint=$"
+ applicationUrl: "https://localhost:44302;http://localhost:2544"
+ environmentVariables:
+ ASPNETCORE_ENVIRONMENT: "Development"
+ hotReloadProfile: "aspnetcore"
+ Microsoft 365 app (browser):
+ commandName: "Project"
+ dotnetRunMessages: true
+ launchBrowser: true
+ launchUrl: "https://www.office.com/m365apps/$?auth=2&login_hint=$"
+ applicationUrl: "https://localhost:44302;http://localhost:2544"
+ environmentVariables:
+ ASPNETCORE_ENVIRONMENT: "Development"
+ hotReloadProfile: "aspnetcore"
+ Outlook (browser):
+ commandName: "Project"
+ dotnetRunMessages: true
+ launchBrowser: true
+ launchUrl: "https://outlook.office.com/host/$?login_hint=$"
+ applicationUrl: "https://localhost:44302;http://localhost:2544"
+ environmentVariables:
+ ASPNETCORE_ENVIRONMENT: "Development"
+ hotReloadProfile: "aspnetcore"
+```
+
+The following code is the sample of teamapp.yml:
+
+```yml
+# Triggered when 'teamsapp deploy' is executed
+deploy:
+ - uses: cli/runDotnetCommand
+ with:
+ args: publish --configuration Release OldMyTeamsApp1.csproj
+ # Deploy your application to Azure App Service using the zip deploy feature.
+ # For additional details, refer to https://aka.ms/zip-deploy-to-app-services.
+ - uses: azureAppService/zipDeploy
+ with:
+ # Deploy base folder
+ artifactFolder: bin/Release/net8.0/publish
+ # The resource id of the cloud resource to be deployed to.
+ # This key will be generated by arm/deploy action automatically.
+ # You can replace it with your existing Azure Resource id
+ # or add it to your environment variable file.
+ resourceId: ${{TAB_AZURE_APP_SERVICE_RESOURCE_ID}}
+```
+++
+##### Solution launch user file
+
+# [New structure](#tab/new)
+
+This file must be stored at the same level of the solution folder.
+
+```json
+[
+ {
+ "Name": "Microsoft Teams (browser)",
+ "Projects": [
+ {
+ "Name": "TeamsApp\\TeamsApp.ttkproj",
+ "Action": "StartWithoutDebugging",
+ "DebugTarget": "Microsoft Teams (browser)"
+ },
+ {
+ "Name": "MyTeamsApp8\\MyTeamsApp8.csproj",
+ "Action": "Start",
+ "DebugTarget": "Start Project"
+ }
+ ]
+ },
+ {
+ "Name": "Microsoft 365 app (browser)",
+ "Projects": [
+ {
+ "Name": "TeamsApp\\TeamsApp.ttkproj",
+ "Action": "StartWithoutDebugging",
+ "DebugTarget": "Microsoft 365 app (browser)"
+ },
+ {
+ "Name": "MyTeamsApp8\\MyTeamsApp8.csproj",
+ "Action": "Start",
+ "DebugTarget": "Start Project"
+ }
+ ]
+ },
+ {
+ "Name": "Outlook (browser)",
+ "Projects": [
+ {
+ "Name": "TeamsApp\\TeamsApp.ttkproj",
+ "Action": "StartWithoutDebugging",
+ "DebugTarget": "Outlook (browser)"
+ },
+ {
+ "Name": "MyTeamsApp8\\MyTeamsApp8.csproj",
+ "Action": "Start",
+ "DebugTarget": "Start Project"
+ }
+ ]
+ }
+]
+```
+
+# [Old structure](#tab/old)
+
+None
++
platform Whats New https://github.com/MicrosoftDocs/msteams-docs/commits/main/msteams-platform/whats-new.md
Teams platform features that are available to all app developers.
**2024 July**
-* ***July 3, 2024***: [Screen share content to the meeting Stage simplifies app content sharing during meetings and provides a seamless multi-player viewing experience.](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md#screen-share-content-to-meetings)
+* ***July 03, 2024***: [Screen share content to the meeting Stage simplifies app content sharing during meetings and provides a seamless multi-player viewing experience.](apps-in-teams-meetings/build-apps-for-teams-meeting-stage.md#screen-share-content-to-meetings)
* ***July 02, 2024***: [You can extend bot-based message extension plugins to Teams meetings.](messaging-extensions/build-bot-based-plugin.md#enable-message-extension-as-a-plugin-for-copilot-for-meetings)
Discover Microsoft Teams platform features that are deprecated. You can now get
Teams platform features that aren't available.
-* ***July 16, 2024***: The existing [Microsoft 365 (previously called Office 365) connectors ](webhooks-and-connectors/what-are-webhooks-and-connectors.md) across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/).
+* ***July 25, 2024***: Teams, Outlook, and Microsoft 365 web domains are migrating to `*.cloud.microsoft` domain. [Configure your app](m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers) before September 2024 to ensure continued functionality.
+* ***July 16, 2024***: The existing [Microsoft 365 (previously called Office 365) connectors](webhooks-and-connectors/what-are-webhooks-and-connectors.md) across all cloud platforms are nearing deprecation, and the creation of new Microsoft 365 connectors will soon be blocked. For more information on the schedule and how the Workflows app provides a more flexible and secure experience, see [retirement of Microsoft 365 connectors within Microsoft Teams](https://devblogs.microsoft.com/microsoft365dev/retirement-of-office-365-connectors-within-microsoft-teams/).
* ***April 30, 2024***: In tab experiences, tab margins are deprecated.
Teams platform features that aren't available.
* ***April 01, 2024***: Azure AD PowerShell is deprecated on March 30, 2024. To interact with Microsoft Entra ID, we recommend you to migrate to [Microsoft Graph PowerShell](/powershell/microsoftgraph/overview).
-* ***February 02, 2024***: Teams, Outlook, and Microsoft 365 web domains are migrating to *cloud.microsoft* domain. [Configure your app](m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers) before June 2024 to ensure continued functionality.
+* ***February 02, 2024***: Teams, Outlook, and Microsoft 365 web domains are migrating to `*.cloud.microsoft` domain. [Configure your app](m365-apps/extend-m365-teams-personal-tab.md#configure-content-security-policy-headers) before June 2024 to ensure continued functionality.
* ***February 02, 2024***: The Collaboration controls for model-driven applications **are** set to retire by May 2024. We recommend removing the Collaboration controls and Collaboration connector from all Power Apps solutions and prepare users for the upcoming [Collaboration controls](~/samples/collaboration-control.md) retirement.