문제

Inside Visual Studio 2010에서 코드 계약이 잘 작동하지만 얻을 수 없습니다. ccrewrite.exe 명령 줄에서 유용한 것을 수행합니다. 다음은 샘플 앱입니다.

using System.Diagnostics.Contracts;

public class Dummy
{
    public static void Main(string[] args)
    {
        Contract.Requires(args.Length > 0);
    }
}

그런 다음 코드를 컴파일하고 ccrewrite.exe를 실행합니다.

> csc /debug+ /D:CONTRACTS_FULL Dummy.cs

> ccrewrite /o:RewrittenDummy.exe Dummy.exe
elapsed time: 61ms

아니요 RewrittenDummy.exe 나중에 파일.

많은 옵션을 시도했지만 아무런 차이가 없습니다. 내가 알아 차린 몇 가지 :

  • 존재하지 않는 파일을 지정하면 죽기 때문에 확실히 Dummy.exe를로드하고 있습니다.
  • Dummy.exe는 계약에 대한 참조를 확실히 포함합니다. 계약이없는 경우, 인수없이 실행하면 적절하게 실패합니다 (그러나 오류 메시지가 다시 작성된 경우 예상대로 작성되지 않았습니다).
  • 사후 조건과 불변량을 사용하면 차이가 없습니다

나는 경고와 말을 돌리려고 노력했지만, 그것이 내가 무엇을 잘못하고 있는지 전혀 도움이되지 않습니까?

(또한 물었다 Code Contracts Forum의 질문. 여기에 관련 답변을 직접 추가하겠습니다.)

도움이 되었습니까?

해결책

좋아, 이건이었다 MSDN 포럼에서 답변했습니다. 한 번은, 그것은 실제로 내가 완전히 바보가 아니 었습니다. 그것은 실제로 경고와 관련이있는 것입니다.

자세한 내용은 포럼 게시물을 읽지 만 기본적인 문제는 ccrewrite 계약 클래스를 찾을 수 없음 : .NET 3.5 CLR 버전을보고있었습니다. mscorlib .NET 4.0 대신.

이는 관련 어셈블리 경로를 명시 적으로 나열하여 고정 할 수 있습니다.

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top