Ссылка на сборку, заключенную в поддельное пространство имен

#c#

#c#

Вопрос:

API AMPL C# состоит из сборки, которая содержит несколько перечислений, расположенных в глобальном пространстве имен. Одним из них является перечисление с именем «Тип», очевидно, это неудобно, потому что оно заставляет быть явным при использовании System.Type.

Мне интересно, есть ли способ определить пространство имен для включения всей сборки, на которую ссылается ссылка, чтобы она не конфликтовала со стандартными библиотеками.

Я не хочу загружать сборку динамически с помощью сборки.Load (), потому что я потеряю интеллект и заставлю себя использовать отражение.

Если ничего подобного нет, я полагаю, что мне придется создать прокси-сборку, содержащую ссылку на API AMPL, и перенаправлять все вызовы, но это будет раздражать.

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

1. Может быть, попросить их это исправить? Я бы счел это недостатком дизайна.

2. «определите пространство имен, в которое будет заключена вся ссылочная сборка, чтобы она не конфликтовала со стандартными библиотеками». — есть: Псевдонимы сборки, это описано в посте, который я пометил как обман (даже если ваш вопрос не совсем такой же)

3. @Dai: Значит , если бы OP использовал псевдоним библиотеки AMPL как ampl , им пришлось бы делать ampl::Type и такое? Кажется разумным, пока вам не придется использовать эти типы, но я не думаю, что вы сможете using ampl::; импортировать эти типы для одного файла. В конечном итоге вам придется использовать ampl:: префикс во многих местах.

4. @madreflection Вам не нужно добавлять using операторы на каждую страницу, псевдонимы сборок являются глобальными для всего проекта (хотя C#/.NET не добавлял поддержку произвольных using псевдонимов до C# 10.0).

5. @madreflection «вам придется использовать псевдонимы всех типов, которые вы использовали в этом файле таким же образом» — нет, только неоднозначные типы (например Type ), предполагая, что у других типов нет конфликтующих имен. Остальное можно импортировать вместе с using ampl; using System; using Type = global::System.Type; using AmplType = ampl::Type; .