Поделиться через


Перенос проекта Microsoft 365 Agents Toolkit с версии 17.9 на 17.10+

В этом руководстве подробно описывается процесс перехода с традиционного шаблона на новую структуру проекта в Microsoft Teams. Переход необходим для использования новейших функций и повышения удобства обслуживания проекта. Новая структура проекта представляет собой более удобный и эффективный способ управления приложениями Teams с помощью .ttkproj файла для представления нового типа проекта.

В новом наборе средств агентов Microsoft 365 (ранее известном как Набор средств Teams) версии 17.10 решение Teams содержит два проекта: проект Teams и исходный код.

  • Проект Teams: проект Teams содержит пакет приложения Teams и файлы конфигурации набора средств агентов.
  • Исходный код. Проект исходного кода — это бизнес-логика для вкладки, бота или других пользователей.

Разделение проекта и исходного кода Teams позволяет интегрировать существующие веб-решения или решения ботов в Teams. Такой подход упрощает процесс интеграции любого существующего проекта или решения с Teams.

Предварительные условия

Перед началом процесса миграции убедитесь, что у вас есть следующее:

  • Проект Teams, созданный с помощью набора средств агентов для Visual Studio 17.9 или более ранней версии.
  • Visual Studio версии 17.10, предварительная версия 3 или более поздняя.
  • Функция нескольких стартапов. Чтобы включить несколько запусков, перейдите в раздел Сервис>Параметры>Предварительная версия функции>Включить профили запуска нескольких проектов.

Процесс миграции

Чтобы перейти на новую структуру проекта, выполните следующие действия.

  1. В папке проекта Teams, где у вас есть файл решения Visual Studio, создайте новую папку. На последующих шагах эта папка называется TeamsApp .

  2. Создайте файл TeamsApp.ttkproj в папке TeamsApp, и имя файла проекта должно соответствовать новому имени папки. Добавьте следующий код в файл TeamsApp.ttkproj :

    <?xml version="1.0" encoding="utf-8"?>
    <Project ToolsVersion="15.0" Sdk="Microsoft.TeamsFx.Sdk">
      <ItemGroup>
        <ProjectCapability Include="ProjectConfigurationsDeclaredDimensions" />
      </ItemGroup>
    </Project>
    
  3. Удалите следующие папки конфигурации и файлы из папки проекта и добавьте их в папку TeamsApp .

    • Папки: appPackage, env, infra
    • Файлы: m365agents.yml, m365agents.local.yml, aad.manifest.json

    Примечание.

    После перемещения папок и файлов они автоматически включаются в файл TeamsApp.ttkproj , и вам не нужно добавлять их в TeamsApp.ttkproj вручную.

  4. В соответствии с параметром launchSettings.jsonпереместите возможность запуска браузера или средства тестирования в launchSettings.json папку TeamsApp .

    • Создайте launchSettings.json файл в папке TeamsApp . Добавьте содержимое файла launchSettings.json папки проекта в только что созданный launchSettings.json в папке TeamsApp .
    • В только что созданной launchSettings.json папке TeamsApp удалите dotnetRunMessagesполя , launchBrowser, applicationUrl, environmentVariablesи hotReloadProfile .
    • В папке launchSettings.json проекта удалите launchBrowserполя , launchPlaygroundи launchUrl и дублированные профили.

    Примечание.

    • Объект launchSettings.json проекта должен начинаться сам по себе.
    • Папка launchSettings.jsonTeamsApp настроена для запуска браузера или приложения средства тестирования, которое взаимодействует с проектом.
  5. Откройте файл решения с помощью Visual Studio версии 17.10, предварительной версии 3 или более поздней, и добавьте новый проект TeamsApp.ttkproj из папки TeamsApp в файл решения в Visual Studio.

  6. Удалите <ProjectCapability Include="TeamsFx"/> в проекте.

  7. Создайте {{solutionName}}.slnLaunch.user файл. Этот файл можно создать с помощью VS или вручную.

    1. Щелкните решение правой кнопкой мыши и выберите Настроить запускаемые проекты....
    2. Выберите Несколько начальных проектов и добавьте дополнительные профили, которые одновременно запускают TeamsApp и проект. При необходимости можно переименовать профили.
    3. Нажмите OK. Файл {{solutionName}}.slnLaunch.user автоматически сохраняется в папке решения.
  8. Измените m365agents.local.yml файлы и m365agents.yml в папке TeamsApp .

  9. Каждое действие, изменяющее проект, должно быть обновлено, так как путь обновлен. Сосредоточьтесь на следующих действиях:

    • uses: file/createOrUpdateJsonFile: это действие может изменить appSettings.json файл проекта для настройки сред выполнения. Обновите target поле до правильного пути.

      Важно!

      Вам не нужно изменять launchSettings.json с помощью file/createOrUpdateJsonFile. Если он присутствует в m365agents.local.yml, удалите его.

    • uses: cli/runDotnetCommand: это действие выполняет .NET команду в проекте, чтобы упаковать его. Измените workingDirectory поле на новый путь и обновите командную строку правильным .csproj путем.
    • uses: azureAppService/zipDeploy: это действие удаленно развертывает упакованный файл. Обновите workingDirectory поле до правильного пути.

    Ниже приведен пример изменения конфигураций YAML:

    # 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
    
    

    Примечание.

    Мы рекомендуем подготовить и развернуть в новой папке проекта для тестирования приложения.

  10. Закройте решение и убедитесь, что все изменения сохранены.

Вы успешно перенесли проект, и структура папок обновлена следующим образом:

Структура папок
Файл типа проекта

Это расширение файла — .ttkproj.

<?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>
LaunchSettings.json

Следующий код является примером проекта C#:

{
  "profiles": {
    "Start Project": {
      "commandName": "Project",
      "dotnetRunMessages": true,
      "applicationUrl": "https://localhost:44302;http://localhost:2544",
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development"
      },
      "hotReloadProfile": "aspnetcore"
    }
  }
}

Следующий код является примером проекта TeamsApp:

{
  "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}}",
    }
  }
}
YamL-файл приложения Teams

Ниже приведен пример teamapp.local.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}}

Следующий код является примером teamapp.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
Запуск пользовательского файла решения

Этот файл должен храниться на том же уровне папки решения.

[
  {
    "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"
      }
    ]
  }
]