Предупреждение CS0436 неожиданно появляется при обновлении до VS2015
Я только что обновился от VS2013 до VS2015, и появилась тонна предупреждений CS0436, все, похоже, связаны с одной и той же проблемой.
Я медленно переношу веб-приложения с VB на С#, поэтому, возможно, это действительно просто. Я новичок в С#, поэтому, пожалуйста, используйте ответы непрофессионального типа...
Мое решение структурировано как таковое:
Проект 1 - Многоразовые методы (доступ к базе данных и т.д.)
\ CommonDataAccessFunctionality.vb
Namespace MyCompany
Public Class CommonDataAccessFunctionality
Public Sub New(ByVal storedProcedureToRun As String)
' db stuff here '
End Sub
End Class
End Namespace
Проект 2 - применимый к сети (С#) с зависимостью от Project 1
App_Code\DataAccess.cs
using System.Data;
using System.Data.SqlClient;
namespace QrCodes.App_Data
{
public abstract class QrDataCommon : MyCompany.CommonDataAccessFunctionality
{
public QrDataCommon(string storedProcedureToRun)
: base(storedProcedureToRun)
{
}
}
public class QrDataGrabber : QrDataCommon
{
public QrDataGrabber(string storedProcedureToRun)
: base(storedProcedureToRun)
{
}
}
}
Ошибка отображается в этой строке:
public class QrDataGrabber : QrDataCommon
Предупреждение CS0436
Тип "QrDataCommon" в "D:\Web\wwwroot\MyApp\MyApp-InProgress-Person WebApi\QrCodes\App_Code\DataAccess.cs" конфликтует с импортированным типом "QrDataCommon" в "QrCodes, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = null '. Использование типа, определенного в 'D:\Web\wwwroot\MyApp\MyApp-InProgress-Person WebApi\QrCodes\App_Code\DataAccess.cs'.
Я прочитал много сообщений здесь о проекте, ссылающемся на себя, однако в диалоговом окне проекта нет ссылок (которые перечислены), только одна зависимость в проекте 2 к проекту 1. Кроме того, проект 2 не имеет элементов управления и т.д., которые ссылаются на что-то еще.
Может кто-нибудь, пожалуйста, дать мне некоторое руководство? Я не уверен, что это полезно, но в браузере объектов при поиске "QrDataCommon" я вижу следующее:
Обновление на основе помощи до сих пор
Если я решила просмотреть все файлы в обозревателе решений, в каталоге\bin\есть файл под названием QrCodes.dll, который создается при создании проекта/решения. Я также вижу то же самое в скрытой папке Debug.
Если я переименую класс QrDataCommon
в нечто совершенно уникальное, скажем QrDataCommonTest123
и очистите/перестройте, ошибка немедленно QrDataCommonTest123
, чтобы использовать новое имя класса.
Таким образом, возможно, это будет связано с целевым местоположением сборки приложения или чем-то еще?
У вас есть 2 библиотеки DLL, использующие одно и то же имя класса QrDataCommon
. Переименуйте один из них или не QrCodes.dll
.
Предупреждение CS0436 Тип "QrDataCommon" в "... DataAccess.cs" конфликтует с импортированным типом "QrDataCommon" в "...". Использование типа, определенного в '... DataAccess.cs'.
Большинство людей, вероятно, сталкиваются с этим из-за проектов, ссылающихся на себя (как вы указали); однако в вашем случае это потому, что ваш проект VB имеет тип с точно таким же пространством имен и именем - результатом выполнения прямого порта 1:1 от VB до С#.
Из-за того, что имя и пространство имен идентичны, С# имеет выбор: какой из них следует использовать? Он информирует вас о том, что он сделан наиболее логичным выбором и выбрал тот, который был выбран в вашем проекте С# - что, вероятно, вы так хотели.
Это ваши варианты:
- Хороший вариант: как только вы завершили перенос типа на С#, удалите его из проекта VB и перекомпилируйте проект VB. Хороший вариант: если вы не распространяете свой код как автономную повторно используемую DLL (похоже, что это не так), измените корневое пространство имен вашего кода на С#. Игнорируйте ошибку до тех пор, пока вы не закончите порт. Наихудший вариант: используйте глобальный псевдоним пространства имен.
Еще в рубрике
- Вопросы
- Visual-studio-2015
- Предупреждение CS0436 неожиданно появляется при обновлении до VS2015