Ошибка «Сборка с таким же простым именем уже импортирована» без повторной ссылки - PullRequest
13 голосов
/ 01 июля 2010

Я получаю следующую ошибку:

ошибка CS1704: сборка с таким же простым именем 'Interop.xxx.dll, версия = 1.0.0.0, культура = нейтральная, PublicKeyToken = нольуже был импортирован.Попробуйте удалить одну из ссылок или подписать их, чтобы включить бок о бок.

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

Это также происходит только тогда, когда я использую msbuild для сборки из командной строки на моем компьютере разработчика.Если я выполняю сборку через Visual Studio или выполняю чистую сборку на нашем CI-сервере, я не вижу этой ошибки.

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

Ответы [ 6 ]

8 голосов
/ 02 июля 2010

Похоже, я не могу читать сегодня!
В проекте была ссылка на Interop и ссылка COM, которая генерировала "то же самое" взаимодействие. Так что их было два, и я просто не очень хорошо искал. Я до сих пор не понимаю, почему это работает в других местах, но это все-таки исправило.

2 голосов
/ 01 июля 2010

Если это веб-проект, есть ли там ссылки на другую версию со строгим именем? Они не будут отображаться как зависимость проекта, но вызовут ошибку времени выполнения, как вы описали. Надеюсь, это поможет

1 голос
/ 03 марта 2016

У меня была эта проблема, но в моем случае у меня была старая копия, помещенная в текущую папку для EXE, загружающая мой компонент, которая была загружена вместе с текущей, которая была загружена вручную из папки моих проектов. Удаление этой старой копии решило мою проблему.
Я использовал окно Отладка> Windows> Модули , чтобы увидеть, какие модули были загружены в то время, и это решило мою проблему.

0 голосов
/ 21 мая 2018

Попробуйте вместо этого: удалите Interop.xx.dll из справочного раздела в обозревателе решений и перестройте проект

0 голосов
/ 06 апреля 2018

В окне Список ошибок проект, который вызывал эту ошибку, был указан в столбце Проект.Я обошел эту ошибку, выполнив следующее:

  • Я выгружал указанный проект (щелкните правой кнопкой мыши => Выгрузить проект)
  • Открыл XML для редактирования (щелкните правой кнопкой мыши по выгруженномуproject => Edit {ProjectName.csproj}).
  • Обнаружил поврежденную .dll и заметил, что она была указана несколько раз в XML
  • Удален весь тег Reference, связанный с ошибочной DLLи сделал это для каждой копии ссылки, кроме первой в списке

Причина, по которой она была указана несколько раз, заключалась в том, что несколько библиотек, на которые ссылались, использовали эту dll.Это не должно быть проблемой само по себе, поэтому я не уверен, что вызвало внезапное появление этой ошибки для меня.Я уточню этот ответ, если выясню.

0 голосов
/ 04 мая 2017

Для тех, кто сталкивается с тем же, что и я: если сборка выполняется из командной строки с использованием свойства AssemblyName, он перезапишет все сборки, сгенерированные всеми проектами решений - иными словами, вы получите (N -1) сборки, названныето же самое, где N нет.проектов - стартап (который обычно генерирует exe).

Это происходит потому, что все свойства командной строки сборки являются глобальными и перезаписывают любые параметры, специфичные для проекта.См. this и this .

Из ссылки MSDN , упомянутой выше:

Глобальные свойства - это свойства, которыеустанавливаются с помощью параметра / property в командной строке или свойств, которые устанавливаются интегрированной средой разработки (IDE) перед сборкой проекта. Эти глобальные свойства применяются ко всем проектам, созданным с использованием этого движка. .

В моем конкретном случае, где Jenkins - это инструмент CI, я закончил тем, что добавил пакет Windows.в конце команда переименовывает .exe только в то, что я изначально предполагал при передаче параметра AssemblyName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...