Подтвердить что ты не робот

Предупреждение "Тип X в Y.cs конфликтует с импортированным типом X в Z.dll"

main.cs моего проекта возвращает следующее предупреждение:

Предупреждение 1 Тип 'Extensions.MessageDetails' в 'PATH\Extensions.cs' конфликтует с импортированным типом 'Extensions.MessageDetails' в 'path\lib.dll'. Использование типа, определенного в 'path\Extensions.cs'. путь \main.cs

Что не так с моим проектом? Как избавиться от предупреждения?

Код моего проекта имеет следующую структуру:

Extensions.cs

namespace Extensions
{

    public class MessageDetails
    {
        public string message { get; set; }
        public string link { get; set; }
        public string picture { get; set; }
        public string name { get; set; }
        public string caption { get; set; }
        public string description { get; set; }
        public string userid { get; set; }
        public string username { get; set; }

        public object actions { get; set; }
        public object privacy { get; set; }
        public object targeting { get; set; }
    }

}

lib.dll

namespace MyClassLib {

    public class MyClassLibFoo {
        public void foo(MessageDetails parameters) {
            /* .. */
        }
    }

}

main.cs

using MyClassLib;
using Extensions;

class Program
{
    static void Main(string[] args)
    {
        MessageDetails md = new MessageDetails();
    }
}
4b9b3361

Ответ 1

Похоже, Extensions.cs является частью проекта, который создает lib.dll и ваш main.exe

Удалите его из одного, чтобы исправить эту проблему.

Ответ 2

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

Проверьте ссылки на проект для любых циркулярных ссылок.

Ответ 3

У меня была такая проблема, когда я вернулась из целевой версии .NET Framework с 4.5.2 до 4.0. Классы в моей папке App_Code имели методы, которые вызывали методы в других классах в этой папке. Когда я создал стандартную папку, которую я назвал "AppCode", и переместил мои классы в нее, у меня больше не было этой проблемы. Если я заново создал папку "App_Code" и переместил свои классы обратно в нее, у меня снова возникла эта проблема. Я убежден, что это связано с моей версией .NET Framework или что Visual Studio просто не справляется с изменением ее после того, как она была первоначально построена/нацелена на другую версию.

Ответ 4

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

Вы можете попробовать создать библиотеку классов "Common Files" и добавить к ней класс расширений, таким образом вы всегда будете использовать правильный класс

Ответ 5

У меня была эта проблема с проектом, который также размещен на NuGet. Я проверил все ссылки на проект. Наконец, браузер объектов обнаружил, что DLL старой версии моего пакета NuGet каким-то образом загружалась в Visual Studio из папки кэша NuGet ( "C:\Users\{username} \. Nuget\packages" ). Я удалил пакет из папки кеша, он исчез из браузера объектов, и все снова работает нормально.

Ответ 6

У меня был общий проект "Проект А" , который был включен как в "Проект Б" , так и "Проект С".

"Проект А" был добавлен как общий проект в "Проект Б" и "Проект С".

"Проект А" также включал традиционную ссылку на "Проект Б" .

Чтобы исправить проблему, я удалил ссылку на "Project B" из "Project A".

Ответ 7

Если вам действительно нужно, чтобы оба класса были объявлены или указаны в двух отдельных dll, вы можете пометить свой класс как internal.

Внутренние типы или элементы доступны только внутри файлов в одной и той же сборке, поэтому это предотвратит столкновение.

Ответ 8

У меня была такая же проблема. Простое решение для этого.

Проверьте ссылки на проект, там должна быть одинаковая ссылка на проект. просто удалите это, он будет работать.