Vra

Ek het Kode Kontrakte werk boete van binne Visual Studio 2010, maar ek kan nie ccrewrite.exe om iets nuttig uit die opdrag lyn te doen kry. Hier is 'n monster app:

using System.Diagnostics.Contracts;

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

Ek stel dan die kode en hardloop ccrewrite.exe op dit:

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

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

Daar is geen RewrittenDummy.exe lêer daarna.

Ek het probeer om baie opsies, maar niks is om 'n verskil. 'N Paar dinge wat ek opgemerk:

  • Dit is beslis laai Dummy.exe, want as ek 'n nie-bestaande lêer spesifiseer, dit sterf
  • Dummy.exe bevat beslis verwysings na CONTRACT - as ek loop dit met geen argumente, is dit nie gepas (maar die fout boodskap het nie gevul is in as ek sou verwag as dit was herskryf)
  • Die gebruik van postconditions en invarianten maak geen verskil

Ek het probeer om die draai waarskuwings en breedsprakigheid up, en dit beteken glad nie help Wat doen ek verkeerd?

(ook gevra as 'n vraag in die Kode Kontrakte forum . Ek sal enige relevante antwoorde hier myself voeg.)

Was dit nuttig?

Oplossing

Goed, hierdie is antwoord in die MSDN Forum . Vir een keer, dit was nie regtig my om heeltemal dom -. Dit is iets wat werklik kan doen met 'n waarskuwing

Lees die forum post vir volledige besonderhede, maar die basiese probleem is dat ccrewrite nie die kontrak klasse kon vind. Dit was op soek in die NET 3.5 CLR weergawe van mscorlib in plaas van die NET 4.0 een

Dit kan gedoen word deur uitdruklik die lys van die pad na die betrokke vergadering:

> ccrewrite /o:rewrittendummy.exe dummy.exe 
  /libpaths:%SystemRoot%\Microsoft.Net\Framework\v4.0.20506
Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top