Ответ 1
Похоже, Extensions.cs является частью проекта, который создает lib.dll и ваш main.exe
Удалите его из одного, чтобы исправить эту проблему.
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();
}
}
Похоже, Extensions.cs является частью проекта, который создает lib.dll и ваш main.exe
Удалите его из одного, чтобы исправить эту проблему.
В моем случае, с Visual Studio 2013, я обнаружил, что одна из моих классных библиотек разработала ссылку на себя. Я думаю, что это случилось, когда я добавил новый проект в свое решение, или это была ошибка, но в любом случае это вызывало эту точную проблему.
Проверьте ссылки на проект для любых циркулярных ссылок.
У меня была такая проблема, когда я вернулась из целевой версии .NET Framework с 4.5.2 до 4.0. Классы в моей папке App_Code имели методы, которые вызывали методы в других классах в этой папке. Когда я создал стандартную папку, которую я назвал "AppCode", и переместил мои классы в нее, у меня больше не было этой проблемы. Если я заново создал папку "App_Code" и переместил свои классы обратно в нее, у меня снова возникла эта проблема. Я убежден, что это связано с моей версией .NET Framework или что Visual Studio просто не справляется с изменением ее после того, как она была первоначально построена/нацелена на другую версию.
У вас не может быть двух экземпляров класса расширений, хотя код одинаковый, они не рассматриваются как один и тот же объект. И ваша dll, и основное приложение должны будут ссылаться на то же самое.
Вы можете попробовать создать библиотеку классов "Common Files" и добавить к ней класс расширений, таким образом вы всегда будете использовать правильный класс
У меня была эта проблема с проектом, который также размещен на NuGet. Я проверил все ссылки на проект. Наконец, браузер объектов обнаружил, что DLL старой версии моего пакета NuGet каким-то образом загружалась в Visual Studio из папки кэша NuGet ( "C:\Users\{username} \. Nuget\packages" ). Я удалил пакет из папки кеша, он исчез из браузера объектов, и все снова работает нормально.
У меня был общий проект "Проект А" , который был включен как в "Проект Б" , так и "Проект С".
"Проект А" был добавлен как общий проект в "Проект Б" и "Проект С".
"Проект А" также включал традиционную ссылку на "Проект Б" .
Чтобы исправить проблему, я удалил ссылку на "Project B" из "Project A".
Если вам действительно нужно, чтобы оба класса были объявлены или указаны в двух отдельных dll, вы можете пометить свой класс как internal
.
Внутренние типы или элементы доступны только внутри файлов в одной и той же сборке, поэтому это предотвратит столкновение.
У меня была такая же проблема. Простое решение для этого.
Проверьте ссылки на проект, там должна быть одинаковая ссылка на проект. просто удалите это, он будет работать.