У меня есть решение для веб-сайта (Visual Studio 2005), которое содержит следующие проекты:
- Проект веб-сайта (без файла .vbproj или .csproj),
- VB.Проект библиотеки классов сети
Оба ссылаются на сборку, содержащую элемент управления (назовем его MyControl), который имеет строгое имя.Таким образом, график зависимости выглядит следующим образом:
MyControl <-------- web site project
/|\ |
| V
\------------- class library
Оба проекта ссылаются на сборку MyControl из одного файла.
Библиотека классов содержит следующий PageBaseClass:
Public MustInherit Class PageBaseClass
Inherits System.Web.Page
Public MustOverride ReadOnly Property MyControlRef() As MyControl
End Class
ИПроект веб-сайта содержит страницу, которая наследуется от этого класса и переопределяет свойство.
Partial Class SomePage
Inherits PageBaseClass
Public Overrides ReadOnly Property MyControlRef() As MyControl
Get
Return Me.ctlMyControlDefinedInAspxFile
End Get
End Property
End Class
Проблема в том, что приведенный выше код не компилируется - сборка заканчивается следующей ошибкой:
ошибка BC30284: свойство 'MyControlRef' не может быть объявлено как 'Overrides', потому что оно не переопределяет свойство в базовом классе.
Мне кажется, что у типа MyControl были другие "значения"в проекте веб-сайта и в проекте библиотеки классов (хотя он «приходит» из одной и той же сборки) - в результате свойство MyControlRef в SomePage не может переопределить свойство в PageBaseClass, поскольку оно возвращает другой тип.
Некоторые примечания:
- Веб-сайт и библиотека классов - это проекты Visual Studio 2005, написанные на VB.Net.MyControl - это проект Visual Studio 2008, написанный на C #.Ссылка dll как на веб-сайт, так и на библиотеку классов содержит элемент управления.
- Когда я заменяю строго именованный MyControl версией той же сборки без подписи, сборка завершается успешно.Ошибка возникает только в том случае, если имя MyControl сборки строго определено.
- Я добавил еще один проект библиотеки классов в это решение, которое также содержит класс, унаследованный от PageBaseClass, и которое переопределяет свойство MyControlRef.В этом случае ошибка тоже не возникает.Это происходит только в проекте веб-сайта.
Есть идеи, почему это происходит?И как я могу устранить эту ошибку, сохраняя при этом сборку MyControl со строгим именем?