Обнаружил некоторую странность с контрактами кода, и мне было интересно, знает ли кто-нибудь причину ...
хорошо, так что время для некоторых примеров кода:
Сборка 1:
[ContractClass(typeof(IServiceCodeContract<>))]
public interface IService<T> where T : class { ... }
[ContractClassFor(typeof(IService<>))]
public abstract class IServiceCodeContract<T> : IService<T> where T : class { ... }
public abstract class ServiceBase<T> : IService<T> where T : class { ... }
Сборка 2:
[ContractClass(typeof(ICampaignServiceCodeContract))]
public class CampaignService : ServiceBase<Campaign>, ICampaignService { ... }
[ContractClassFor(typeof(ICampaignService))]
public abstract class ICampaignServiceCodeContract : IServiceCodeContract<Campaign>, ICampaignService { ... }
Теперь вот моя проблема ... В этой последней строке кода компилятор работает нормально, пока я на самом деле не скомпилирую код, затем он выделит "IServiceCodeContract "с синей линией, говорящей, что он не может найти тип, который читает фактическая ошибка:
The type or namespace name 'IServiceCodeContract' could not be found (are you missing a using directive or an assembly reference?)
У меня есть ссылка из сборки 2 в сборку 1, и я импортировал оба "System.Diagnostics.Contracts"Пространство имен и пространство имен, в котором живет отсутствующий класс. Класс объявлен как открытый и отображается в рефлекторе нормально, так почему бы ему не найти его?
Есть ли какая-то проблема с наследованием контракта кода между сборками или чем-то еще?
РЕДАКТИРОВАТЬ:
Можно подумать, может ли быть проблема наследования базового класса контракта из другой сборки ... разве это не делает какой-то сумасшедший бинарный код?у инъекций вещь во время компиляции?
также размещены здесь: http://forums.asp.net/t/1770324.aspx/1