ContractFor가 다른 어셈블리에있는 경우 C # 용 코드 계약이 작동하지 않습니다.

파다완 런던

ContractClass및을 사용하여 인터페이스에 대한 코드 계약을 정의하려고합니다 ContractClassFor. 모든 것이 동일한 어셈블리에 있으면 제대로 작동하지만 인터페이스 정의와 해당 계약 클래스를 다른 어셈블리에 넣은 다음 구체적인 클래스 구현에 넣으면 더 이상 작동하지 않습니다.

예를 들어이 코드는 다음과 같이 작동합니다.

namespace DummyProject
{
    [ContractClass(typeof(AccountContracts))]
    public interface IAccount
    {
        void Deposit(double amount);
    }

    [ContractClassFor(typeof(IAccount))]
    internal abstract class AccountContracts : IAccount
    {
        void IAccount.Deposit(double amount)
        {
            Contract.Requires(amount >= 0);
        }
    }

    internal class Account : IAccount
    {
        public void Deposit(double amount)
        {
            Console.WriteLine(amount);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            Account account = new Account();
            // Contract.Requires will be checked below
            account.Deposit(-1);
        }
    }
}

이제 다음과 같은 별도의 프로젝트가있는 경우 :

namespace SeparateAssembly
{
    [ContractClass(typeof(SeparateAssemblyAccountContracts))]
    public interface ISeparateAssemblyAccount
    {
        void Deposit(double amount);
    }

    [ContractClassFor(typeof(ISeparateAssemblyAccount))]
    internal abstract class SeparateAssemblyAccountContracts 
        : ISeparateAssemblyAccount
    {
        void ISeparateAssemblyAccount.Deposit(double amount)
        {
            Contract.Requires(amount >= 0);
        }
    }
}

그런 다음 주 프로젝트 (위와 다른 어셈블리)에서 다음과 같이 작성합니다.

namespace DummyProject
{
    internal class AccountFromSeparateAssembly 
        : ISeparateAssemblyAccount
    {
        public void Deposit(double amount)
        {
            Console.WriteLine(amount);
        }
    }

    class Program
    {
        static void Main(string[] args)
        {
            ISeparateAssemblyAccount accountFromSeparateAssembly = 
                    new AccountFromSeparateAssembly();

            // Neither of the two statements below will work
            // Contract.Requires will be ignored
            accountFromSeparateAssembly.Deposit(-1);

            ((AccountFromSeparateAssembly)accountFromSeparateAssembly).Deposit(-1);
        }
    }
}

그런 다음 Contract.Requires더 이상 Deposit메서드 에서 확인되지 않습니다 .

이것에 대한 아이디어가 있습니까? 감사합니다!

파다완 런던

및을 포함하는 프로젝트의 코드 계약 설정에서 Contract Reference Assembly= Build선택하여 작동하도록 관리했습니다 .ISeparateAssemblyAccountSeparateAssemblyAccountContracts

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

값이 하드 코딩 된 경우 코드가 작동하지만 getElementByID ( "x")를 사용하여 DOM에서 가져 오면 작동하지 않습니다.

분류에서Dev

다른 파일에서 동일한 코드가 작동하는 경우 INSERT가 작동하지 않습니다.

분류에서Dev

다른 어셈블리를 참조하는 경우 사용자 지정 UserControl 라이브러리를 Visual Studio 도구 상자에 추가 할 수 있습니까?

분류에서Dev

아래 코드가 신속한 삼항 연산자를 사용하여 작동하지만 다른 경우에는 작동하지 않는 이유

분류에서Dev

이 16 비트 메모리 감지 어셈블리 코드가 작동하지 않는 것 같습니다.

분류에서Dev

코드는 한 경우에는 작동하지만 다른 경우에는 작동하지 않습니다.

분류에서Dev

참조에 의한 전달은 C에서 작동하지만이 코드의 경우 C ++에서는 작동하지 않습니다.

분류에서Dev

참조에 의한 전달은 C에서 작동하지만이 코드의 경우 C ++에서는 작동하지 않습니다.

분류에서Dev

코드 블록 ctrl + shift + c가 작동하지 않습니다.

분류에서Dev

코드 블록 ctrl + shift + c가 작동하지 않습니다.

분류에서Dev

내 경우에는 작곡가 이름 간격 "다음으로 사용"이 작동하지 않습니다.

분류에서Dev

Textboxfor에 사용자 지정 이름이있는 경우 ValidationMessageFor가 작동하지 않습니다.

분류에서Dev

Angular 6에서 지연로드를 사용하는 동안 라우팅이 다른 경로에 대해 작동하지 않습니다.

분류에서Dev

아래 코드 조각이 작동하지 않는 경우 일괄 처리 조건에 대한 쿼리가 있습니다.

분류에서Dev

내 PHP 테이블 코드가 작동하지 않습니다.

분류에서Dev

사용자 정의 도우미 클래스의 경우 Laravel 5.2에서 블레이드 @inject ()가 작동하지 않습니다.

분류에서Dev

어떤 이유로 코드가 작동하지 않습니다.

분류에서Dev

어떤 이유로 코드가 작동하지 않습니다.

분류에서Dev

C ++ (COM) Dll 가져 오기에서 C # 코드를 사용하면 제대로 작동하지 않습니다.

분류에서Dev

css hover가이 코드에서 작동하지 않습니다.

분류에서Dev

typescript에 공용체 유형이있는 레코드가 작동하지 않습니다.

분류에서Dev

다른 접두사와 같은 값을 사용하는 경우 ConfigurationProperties이 작동하지 않습니다

분류에서Dev

FriendlyUrl 어셈블리에 추가 할 때 jQuery 드래그 앤 드롭이 작동하지 않습니다.

분류에서Dev

사용 및 어셈블리 참조는 C # 스 니펫에서 자동으로 가져 오지 않습니다.

분류에서Dev

pom이 여러 디렉터리 (A / B / C / pom.xml) 내에있는 경우 Jenkins가 소스 코드를 Gitlab으로 이동 한 후 올바른 POM 파일을 호출하지 않습니다.

분류에서Dev

매크로가 다른 시트에서 실행될 때 셀 C가 비어있는 경우 셀 A 및 B의 내용을 지우는 VBA 코드

분류에서Dev

C # 빌드 경고를 해결하는 방법 동일한 종속 어셈블리의 다른 버전간에 충돌이 발견되었습니다.

분류에서Dev

슬라이드가 사용자 구성 요소 내에서 래핑 된 경우 슬라이드가 작동하지 않습니다.

분류에서Dev

Google Maps API의 동일한 코드가 다른 사이트에서 작동하지 않습니다.

Related 관련 기사

  1. 1

    값이 하드 코딩 된 경우 코드가 작동하지만 getElementByID ( "x")를 사용하여 DOM에서 가져 오면 작동하지 않습니다.

  2. 2

    다른 파일에서 동일한 코드가 작동하는 경우 INSERT가 작동하지 않습니다.

  3. 3

    다른 어셈블리를 참조하는 경우 사용자 지정 UserControl 라이브러리를 Visual Studio 도구 상자에 추가 할 수 있습니까?

  4. 4

    아래 코드가 신속한 삼항 연산자를 사용하여 작동하지만 다른 경우에는 작동하지 않는 이유

  5. 5

    이 16 비트 메모리 감지 어셈블리 코드가 작동하지 않는 것 같습니다.

  6. 6

    코드는 한 경우에는 작동하지만 다른 경우에는 작동하지 않습니다.

  7. 7

    참조에 의한 전달은 C에서 작동하지만이 코드의 경우 C ++에서는 작동하지 않습니다.

  8. 8

    참조에 의한 전달은 C에서 작동하지만이 코드의 경우 C ++에서는 작동하지 않습니다.

  9. 9

    코드 블록 ctrl + shift + c가 작동하지 않습니다.

  10. 10

    코드 블록 ctrl + shift + c가 작동하지 않습니다.

  11. 11

    내 경우에는 작곡가 이름 간격 "다음으로 사용"이 작동하지 않습니다.

  12. 12

    Textboxfor에 사용자 지정 이름이있는 경우 ValidationMessageFor가 작동하지 않습니다.

  13. 13

    Angular 6에서 지연로드를 사용하는 동안 라우팅이 다른 경로에 대해 작동하지 않습니다.

  14. 14

    아래 코드 조각이 작동하지 않는 경우 일괄 처리 조건에 대한 쿼리가 있습니다.

  15. 15

    내 PHP 테이블 코드가 작동하지 않습니다.

  16. 16

    사용자 정의 도우미 클래스의 경우 Laravel 5.2에서 블레이드 @inject ()가 작동하지 않습니다.

  17. 17

    어떤 이유로 코드가 작동하지 않습니다.

  18. 18

    어떤 이유로 코드가 작동하지 않습니다.

  19. 19

    C ++ (COM) Dll 가져 오기에서 C # 코드를 사용하면 제대로 작동하지 않습니다.

  20. 20

    css hover가이 코드에서 작동하지 않습니다.

  21. 21

    typescript에 공용체 유형이있는 레코드가 작동하지 않습니다.

  22. 22

    다른 접두사와 같은 값을 사용하는 경우 ConfigurationProperties이 작동하지 않습니다

  23. 23

    FriendlyUrl 어셈블리에 추가 할 때 jQuery 드래그 앤 드롭이 작동하지 않습니다.

  24. 24

    사용 및 어셈블리 참조는 C # 스 니펫에서 자동으로 가져 오지 않습니다.

  25. 25

    pom이 여러 디렉터리 (A / B / C / pom.xml) 내에있는 경우 Jenkins가 소스 코드를 Gitlab으로 이동 한 후 올바른 POM 파일을 호출하지 않습니다.

  26. 26

    매크로가 다른 시트에서 실행될 때 셀 C가 비어있는 경우 셀 A 및 B의 내용을 지우는 VBA 코드

  27. 27

    C # 빌드 경고를 해결하는 방법 동일한 종속 어셈블리의 다른 버전간에 충돌이 발견되었습니다.

  28. 28

    슬라이드가 사용자 구성 요소 내에서 래핑 된 경우 슬라이드가 작동하지 않습니다.

  29. 29

    Google Maps API의 동일한 코드가 다른 사이트에서 작동하지 않습니다.

뜨겁다태그

보관