Ошибка компиляции vb.net 'abc' неоднозначна в пространстве имен 'xyz' - PullRequest
4 голосов
/ 07 января 2010

У меня есть решение VB.Net, созданное другим разработчиком, и я пытаюсь скомпилировать его на нашей сборочной машине (он компилируется на их машине), но в одном из проектов я получаю сообщение об ошибке, говорящее что-то вроде:

Imyinterface неоднозначно в пространстве имен anamespaceassembly.

Я пытался безуспешно:

  • проверил ссылки, чтобы увидеть любые очевидные ошибки
  • удалил и заново добавил рассматриваемую сборку
  • искал в системе ту же самую DLL
  • попытался скомпилировать исходный код разработчика (.v версия контроля версий)
  • осмотрел сборку с ildasm.exe

Я обычно кодирую на C # и раньше не видел этой ошибки (по крайней мере, в этой форме), не то чтобы это было специфично для VB.Net, но интерфейс для добавления / просмотра ссылок немного отличается, поэтому я подумал, что VB.Net может сделать что-то другое со ссылками.

Я также пытался скомпилировать на другой машине, и он компилируется нормально. Итак, я предполагаю, что это что-то со сборкой машины, но я не уверен, что. Другие конфликтующие сборки, как-то не упоминаемые проектом, возможно ли это?

Есть идеи?

Ответы [ 4 ]

4 голосов
/ 19 ноября 2013

Проверьте ваши ссылки, если у вас есть две версии одной и той же ссылки (например, Microsoft.ReportViewer.Webforms версия 10.0.0.0 и Microsoft.ReportViewer.Webforms 8.0.0.0). Вы получите эту ошибку. Удалите самое старое, и вы должны быть хорошими. Я делаю это для себя все время.

2 голосов
/ 07 января 2010

Причин этой ошибки может быть несколько. В VB вы должны знать, что больше имен, чем вы привыкли в C #, доступно без указания класса. Кроме того, регистр не имеет значения в VB, что может дополнительно упростить вероятность столкновения.

Даже если вы не нашли действительную конфликтующую проблему, вы можете решить ее так же, как в C #: переименуйте ее в операторе Imports:

Imports IM = yourAssembly.Imyinterface

Затем измените код так, чтобы использование Imyinterface было заменено на IM.

ПРИМЕЧАНИЕ. Если ошибка не указывает на конкретную строку, конфликт может быть не в вашей руке. Обычно полное Чистое Решение и Перестройка очень помогает, но иногда неправильно работающий файл (то есть, другая ошибка) вызывает эту ошибку, чтобы всплыть сначала без ясного источника. Попробуйте откатить недавние изменения до места, где это сработало.

Вы также говорите, что это работало на другой машине. Скорее всего, на вашей машине установлена ​​другая версия MS Visual Studio или .NET. Проверьте и сравните точные версии.

1 голос
/ 18 ноября 2014

Я столкнулся с той же проблемой. Я обновил свое приложение с vb6 до vb.net, и когда я изменил конфигурацию сборки с DEBUG на RELEASE, я получил СМЕРТНЫЕ ошибки. Я нашел папку с диликатными ссылками в обозревателе решений. Я удалил эти дубликаты ссылок и успешно создал Build. Я надеюсь, что это может помочь другим.

0 голосов
/ 08 января 2010

Спасибо за ответы! Я пробовал каждый, но все еще были проблемы.

Один момент информации, который я оставил после первоначального вопроса, состоял в том, что проекты VB.net являются обновлениями проектов VB6. В то время я не думал, что это актуально.

После дальнейших исследований сборочная машина использовалась и для сборки проектов VB6. Поэтому я запустил reg32 / u на dll vb6, и это, похоже, решило проблему с VB.net.

Не совсем уверен, почему это исправлено, так как я не ссылался на библиотеки VB6, я думаю, что-то делать с неоднозначными записями в реестре, которые путают проект vb.net.

...