Ответ 1
extern alias alias1;
using alias1::Namespace;
Я столкнулся с маловероятным сценарием, когда ссылаюсь на две внешние сборки, которые имеют одинаковое пространство имен и имен типов. Когда я пытаюсь использовать этот тип, компилятор выдает ошибку, которая не может решить, какой из них я хочу использовать.
Я вижу, что С# предлагает механизм для использования псевдонимов для ссылок. Вы можете даже указать эти псевдонимы через окно Property
ссылки в Visual Studio 2008. Как использовать этот псевдоним в моем коде? Насколько я понимаю, я должен использовать оператор ::
, но он терпит неудачу со следующей ошибкой:
CS0432 - Alias not found
Обычный .
оператор также не работает.
В окне вывода я вижу, что компилятор правильно передает псевдоним в своей командной строке.
Приветствуются любые указатели на то, что я могу попробовать.
extern alias alias1;
using alias1::Namespace;
Попробуйте следующее:
extern alias asm1;
extern alias asm2;
namespace Client
{
class Program
{
static void Main(string[] args)
{
asm1.MyNs.MyClass mc1 = null;
asm2.MyNs.MyClass mc2 = null;
}
}
}
И добавьте global,asm1
в ссылку на проект для assembly1 и global,asm2
для сборки2
Я думаю, вам нужно использовать псевдоним extern. Anson Horton имеет хороший блог по этой проблеме и как использовать extern alias, чтобы исправить его.
Когда вы ссылаетесь на некоторую сборку в проекте, у нее есть псевдоним по умолчанию "global". Когда вы добавляете другой псевдоним для этой сборки, например. "global, AssemblyA", вы будете ссылаться на него следующим образом:
using SomeTypeAlias = AssemblyA::Company.Product.SomeType;
или
void SomeMethod(AssemblyA::Company.Product.SomeType someType) { ... }