Расстраивающие, бессмысленные ошибки в ссылках сборки - PullRequest
1 голос
/ 07 января 2011

Я недавно выполнил (надеюсь, успешное) преобразование VB в C # в библиотеке приличного размера.Тем не менее, я получаю некоторые проблемы от компилятора при попытке его построить.Я создал небольшую вспомогательную библиотеку под названием ExtensionMethods, скомпилировал ее, удалил .dll в папку bin удаленного проекта и добавил ссылку на нее во вновь преобразованную библиотеку.Библиотека имеет два пространства имен, ExtensionMethods.Json и ExtensionMethods.Enums.В любом классе, где я хочу использовать пространство имен Enums, я импортирую его с using ExtensionMethods.Enums.Я делаю то же самое для пространства имен .Json (кстати, оно работает нормально).

Ниже на картинке показано, что происходит:

alt text

Обратите внимание на синюю загогулину под Enums с одновременным предложением для Enums от Intellisense.Вот доказательство того, что VS фактически распознает сборку (.ToInt() - это имя метода расширения):

alt text

Обратите внимание, как Intellisense предлагает и .ToInt(), как расширениеметод AND не имеет в своем составе сплетни, хотя якобы ...

alt text (три файла используют это пространство имен)

, что имело бы смысл, кроме ...

alt text

По сути, это говорит о том, что «Да, Джейсон, вы правильно сослались на все свои сборки, да, ваши сборки содержат пространства имен, которые они должны, но нет, я не понимаюсегодня не хочется компилировать. "

Я просто хочу скомпилировать и покончить с этим монстром.Что мне здесь не хватает?

ОБНОВЛЕНИЕ

ExtensionMethods.Json, другое пространство имен в ExtensionMethods отлично работает при обращении и не выдает ошибку ссылки на сборку.Оба проекта были созданы на одной и той же 64-битной машине, и все они нацелены на .NET 4.

Ответы [ 3 ]

1 голос
/ 07 января 2011

Так вот как я это исправил. По сути, я пошел и удалил .DLL из папки bin, удалил все ссылки на нее, сбросил .DLL обратно и снова сослался на все. Теперь по какой-то странной причине эта проблема компиляции исчезла. Yay.

0 голосов
/ 07 января 2011

Единственный способ решить эту проблему я нашел, когда у меня возникла та же проблема: закомментировать весь этот и связанный с ним код, удалить ссылки, перестроить все, снова добавить ссылку и раскомментировать код, перестроить.

примечание: пересборка, а не сборка ... и просто повторное добавление ссылки не помогает

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

(да, я знаю, это много работы и это отстой, но это единственный способ, который я нашел, чтобы избавиться от него)

0 голосов
/ 07 января 2011

Я смутно помню что-то подобное, когда боролся с проблемой 64 против 32 бит. Убедитесь, что ссылка может использоваться платформой вашего проекта. Если я правильно помню, я ссылался на 32-битную DLL в проекте, который был скомпилирован для «Любого процессора» на 64-битной платформе, или что-то в этом роде, это было некоторое время назад.

...