Можно ли использовать оба Microsoft.Graph и Microsoft.График.Бета-версия в том же приложении?

#c# #microsoft-graph-api #microsoft-graph-sdks

#c# #microsoft-graph-api #microsoft-graph-sdks

Вопрос:

Я пишу некоторый код на C #, предназначенный для .NET 4.8, который должен использовать Microsoft Graph. Это нормально работает с Microsoft.Graph SDK (V1), однако, когда я пытаюсь переключиться на бета-версию, я получаю ошибки компиляции, такие как

 Error CS0433    The type 'GraphServiceClient' exists in both 'Microsoft.Graph.Beta, Version=0.29.0.0 <...>' and 'Microsoft.Graph, Version=1.19.0.0 <...>'
  

Причина в том, что один другой nuget, который я использую, а именно SharePointPnPCoreOnline, к сожалению, зависит от Microsoft.График 1.19.

Казалось бы, проблем с использованием обеих сборок быть не должно, поскольку — согласно текущей документации (https://learn.microsoft.com/en-us/graph/sdks/use-beta ) — Бета-версия должна использовать свое собственное пространство имен:

 using Microsoft.Graph.Beta;
  

К сожалению, это неправильно, обе библиотеки используют одно и то же пространство имен Microsoft.График. Приведенный выше код приводит к

 Error CS0234    The type or namespace name 'Beta' does not exist in the namespace 'Microsoft.Graph' (are you missing an assembly reference?)
  

Я пытаюсь использовать параметры компилятора для разрешения сборки, но в VS2019 это чрезвычайно запутанно — пока безуспешно.

Но мне интересно, почему я ничего не могу найти по этому вопросу, я, конечно, не единственный — может быть, я пропустил что-то очевидное? Пожалуйста, помогите 🙂

Комментарии:

1. Если я не ошибаюсь, ошибка CS0433 — это ошибка компилятора. Две разные сборки, на которые ссылаются в вашем приложении, содержат одно и то же пространство имен и тип, что создает двусмысленность. Чтобы устранить эту ошибку, используйте функцию псевдонима опции компилятора -reference (C # Compiler Options) или не ссылайтесь на одну из своих сборок, чтобы узнать, поможет ли это вам продвинуться вперед.

2. @Dev: К сожалению, это не помогло. Я упомянул об этом в своем вопросе еще до того, как вы ответили. Вы начали свой комментарий с «Если я не ошибаюсь». Я почти уверен, что вы знали, что не ошиблись, потому что остальная часть вашего комментария скопирована из документации MS для CS0234. Спасибо, но давайте попробуем снизить уровень шума.

Ответ №1:

Не уверен, что вы решили эту проблему, но я решил это, добавив псевдоним в Microsoft.График.Бета-пакет. Затем при ссылке добавьте это, чтобы иметь возможность ссылаться на ваши бета-конечные точки или ресурсы. Измените MSGraphBeta на то, что вы добавили в качестве псевдонима в свой пакет.

 extern alias MSGraphBeta;
using GraphBeta = MSGraphBeta.Microsoft.Graph;
  

Комментарии:

1. Вау, спасибо, я совсем забыл о функции «внешнего псевдонима»! В итоге я написал свою собственную тонкую оболочку для вызовов MS Graph и пока не использую SDK. Но я обязательно протестирую ваш подход!

2. Есть идеи, как это сделать с .Net Core?

3. Псевдонимы также можно использовать с .Net Core.