Ошибка "сборка с таким же простым именем уже импортирована" без повторяющейся ссылки

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

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

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

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

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

6 ответов


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


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


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


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

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

из msdn ссылке упоминалось выше:

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

в моем конкретном случае, где Дженкинс инструмент CI, я закончил тем, что добавил пакетную команду windows в конце, чтобы переименовать .exe только для того, что я изначально намеревался при передаче параметра AssemblyName.


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

  • я выгрузил указанный проект (щелкните правой кнопкой мыши => выгрузить проект)
  • открыл XML для редактирования (щелкните правой кнопкой мыши выгруженный проект => Edit {ProjectName.csproj файл}).
  • искал нарушителя .dll, и заметил, что он был указан несколько раз в XML
  • удалены все Ссылочный тег, связанный с оскорбительной dll, и сделал это для каждой копии ссылки, кроме первой из перечисленных

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


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