Ошибка компиляции, когда два проекта используют один тип из сборки со строгим именем - PullRequest
0 голосов
/ 08 марта 2011

У меня есть решение для веб-сайта (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 со строгим именем?

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