#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.