Что может вызвать ошибку Visual Studio / C # MSB3105: дублирующиеся ресурсы - PullRequest
11 голосов
/ 24 ноября 2008

Во время работы над существующим проектом я внезапно получил следующую ошибку при попытке скомпилировать решение:

ошибка MSB3105: Элемент «[имя файла]» был указан более одного раза в параметре «Ресурсы». Дублирующиеся элементы не поддерживаются параметром «Ресурсы».

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

1) Откройте файл .csproj и удалите дублирующую ссылку. [Пробовал это, но я не могу найти дубликатов в этом]

2) В проекте «частичного класса» переместите все в один класс. [Могу попробовать это, но проект был разделен на частичные классы с самого начала, и я не хочу менять это только из-за ошибки]

Так, что еще могло вызвать это?

Ответы [ 5 ]

15 голосов
/ 25 ноября 2008

Вы пытались показать все файлы в Solution Explorer? Где-то там может быть дубликат файла .rsx.

5 голосов
/ 28 ноября 2008

Я нашел ответ в .NET-сообщении Роя Грина, и Тереза ​​была права, хотя я и не узнал его.
Если у вас есть основной класс формы, разделенный на частичные классы, частичные разделы окажутся в обозревателе решений в виде отдельных элементов. И если дважды щелкнуть по ним, они отображаются в режиме конструктора как обычная форма. Но если вы (случайно) отбросили элемент управления в этих формах, Visual Studio создаст новый файл .resx и подпрограмму InitializeComponent для него. Но поскольку эта форма на самом деле является частью класса Main Form, она приводит к ошибке «дубликаты ресурсов». И нет другого решения, кроме как удалить подпрограмму InitializeComponent и вручную удалить файл .resx.

3 голосов
/ 09 декабря 2008

Убедитесь, что в yourForm.cs не определены повторяющиеся ресурсы (.resx). Если вы переименовали форму, удалите старый ресурс, так как новый при компиляции будет создан с новым именем.

2 голосов
/ 24 сентября 2013

У меня это тоже было, в VB. Существует файл «реальной формы» frmMain, а затем я создал новые файлы классов и изменил их так, чтобы они были Частичный открытый класс frmMain . Например, у меня есть ImportFromExcel.vb файл частичного класса (я не хотел загромождать frmMain.vb довольно сложным кодом импорта Excel.)

Все работало нормально, пока я не решил, что хочу использовать OpenFileDialog в Sub ImportFromExcel . Я перетащил OFD из панели инструментов в представление Designer файла ImportFromExcel . (я понятия не имею, почему существует это представление, если вы ничего не можете с ним сделать!) Но, во всяком случае ... перетаскивание OFD в конструктор частичных классов создало ImportFromExcel.resx файл. Операция перетаскивания также создала подпрограмму InitializeComponent в ImportFromExcel , которая является избыточной и показывает ошибку - ее легко исправить с помощью небольшого редактирования.

В конечном итоге я решил не использовать перетаскиваемый ресурс, но локализовал код в файле ImportFromExcel.vb .

Все, что вам действительно нужно сделать, - это щелкнуть правой кнопкой мыши файл ImportFromExcel.resx и выбрать Удалить. Все остальное, кажется, "исправляет себя", и теперь оно прекрасно работает.

2 голосов
/ 13 декабря 2010

Я только что сделал ту же ошибку. Удалите mainform.designer.vb, затем я снова восстановил его из корзины и нашел это сообщение об ошибке при компиляции. Я пытаюсь найти в Google, и кто-то предложил проверить на .vbproj. Сделал это и нашел дубликат на какой-то строке.

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