Hoekom is ccrewrite.exe niks uit die opdrag lyn te doen?
-
05-07-2019 - |
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.)
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