11

Ho sviluppato un progetto C# in Visual Studio Express 2013 e ho trovato Code Contracts per i linguaggi .NET. Impressionato dalla loro brevità e dallo strumento di analisi statica che è venuto con loro, ho iniziato a usarli nella mia base di codice. Tuttavia, quando ho tentato di eseguire il mio programma, ho incontrato un messaggio di errore simile a quello trovato in this SO thread, cioèSupporto per i contratti di codice in Visual Studio Express 2013

... Un assieme (probabilmente "< mio progetto >") deve essere riscritto utilizzando il codice contratti binary rewriter (CCRewrite) perché chiama Contract.Requires e il simbolo CONTRACTS_FULL è definito. Rimuovere eventuali definizioni esplicite del simbolo CONTRACTS_FULL dal progetto e ricostruire ...

Guide suggerire che per risolvere questo problema, devo abilitare contratti codice dalla pagina delle proprietà del mio progetto, ma un codice di ingresso contratti proprietà è da nessuna parte da trovare in Express.

Some MSDN forum threads sembra indicare che tutti gli strumenti per i Contratti di codice sono inclusi nella versione Express, ma la pagina Proprietà Contratti del codice non lo è. Questo sembra essere il caso, dato che sono stato in grado di eseguire il mio progetto in VSE 2013 solo dopo aver attivato i Contratti di codice con una copia di Visual Studio 2012 Ultimate che ho acquisito dalla mia università prima della laurea.

Non c'è davvero alcun modo di lavorare con i Contratti di codice in Visual Studio Express tranne la modifica dei file di progetto manualmente o con una versione a pagamento di Visual Studio? Se questo è il caso, sono estremamente riluttante a usarli del tutto, dal momento che è improbabile che la mia azienda acquisti licenze VS. Inoltre, sembra estremamente strano che Microsoft proverà a diffondere questo nuovo e superiore paradigma di verifica, ma poi lo limiterà solo ai clienti paganti.

+0

Se è possibile abilitarli modificando i file di progetto, non è proprio corretto dire che richiede una licenza VS a pagamento. Non conosco la risposta alla tua domanda, ma sono curioso di sentire le conclusioni. – recursive

+0

@recursive Lasciando tutte le librerie e gli strumenti per i Contratti di codice in Express ma richiedendo di pagare per la voce di menu delle proprietà del progetto che li abilita è ciò che mi confonde. La modifica manuale dei file di progetto generati dalla macchina non è davvero pratica - non è questo il motivo per cui l'IDE è lì in primo luogo? –

+3

@MattKline: non sono mai stato usato VS Express. Intendi dire che la pagina delle proprietà del progetto per i Contratti di codice è assente in Express Edition? Se è così, questo è veramente stupido. – Dennis

risposta

5

Il problema è la tua edizione di Visual Studio. Stai eseguendo l'edizione di Visual Studio 2013 Express, come hai affermato. Per utilizzare il re-writer binario da Visual Studio, è necessario installare le estensioni dei Contratti di codice. Questi possono essere scaricati dal sito Microsoft Research in Software Engineering (RiSE), che è impacchettato come Windows Installer.

Il programma di installazione installa il re-writer binario necessario, nonché una serie di estensioni di Visual Studio. Sfortunatamente, i Contratti di codice dichiarano nel loro manual a pagina 40 che non supportano le varie edizioni di Visual Studio Express. È necessario disporre almeno della versione di Visual Studio 2013 Professional per utilizzare l'estensione binary re-writer dei Contratti di codice da Visual Studio e per visualizzare la scheda Contratti di codice nella finestra delle proprietà del progetto.

Contratti di codice esegue la riscrittura dell'assieme come passaggio post-build. Significato, Visual Studio prima compila il codice .NET come farebbe normalmente. Tuttavia, quando si utilizzano i Contratti di codice e si abilitano le opzioni corrette per il progetto (supponendo che le estensioni VS siano installate — che non è possibile eseguire nelle edizioni Express), il programma di riscrittura binario viene richiamato da Visual Studio dopo la normale compilazione processi.

Invece, dopo aver compilato il programma, è necessario eseguire manualmente il programma ccrewrite installato dai Contratti di codice sull'assieme compilato (e su tutti gli assembly dipendenti) per "riscrivere" i propri assembly, che verranno aggiunti in tutti gli Codice Contratto informazioni di controllo. Consultare la documentazione sui Contratti di codice (disponibile anche sul sito Web di RiSE) per informazioni su come farlo.

+1

È certamente possibile installare le estensioni VS nelle edizioni Express, e mentre sono consapevole che è possibile eseguire 'ccrewrite' manualmente, aggiunge solo più dolore ai colleghi nella creazione del loro ambiente per questo progetto. È deludente che Microsoft contrasti i Contratti di questo tipo rendendoli semplici da usare pagando i clienti. –

+0

@MattKline Leggi la documentazione per le edizioni Express. Non puoi. Lo so; Ho sviluppato estensioni VS. La versione VS meno supportata è Professional (NOTA: non so se questo è cambiato con VS2014CTP2). È possibile installarli "manualmente", se si sa come (non è così difficile) - ma non posso garantire che VS accetti di caricarli anche se sono stati copiati manualmente nelle posizioni corrette su disco e il registro corretto voci fatte. E direi che se sei un negozio di sviluppo professionale che sviluppa software vendibile, dovresti essere in grado di permetterti Pro. – fourpastmidnight

+1

@MattKline Potrebbe essere possibile, tuttavia, installare i componenti aggiuntivi. I componenti aggiuntivi sono nettamente diversi dalle estensioni. Forse è questo che stavi pensando? – fourpastmidnight

3

I contratti dovrebbero essere inutili per Visual Studio Express 2013 (almeno i Contratti di codice sono forniti con un plug-in per tutte le versioni non espresse).

Quindi è necessario definire il simbolo CONTRACTS_FULL nelle proprietà del progetto -> build -> generale -> simboli di compilazione condizionale.

E quindi aggiungere la chiamata corretta a ccrewrite.exe alla riga di comando evento post-build trovata nelle proprietà del progetto -> creare eventi. Il comando deve essere impostato su qualcosa come

"C:\Program Files (x86)\Microsoft\Contracts\Bin\ccrewrite.exe" -throwOnFailure "$(TargetPath)"

ho usato con successo questa sera con NUnit. Usando i contratti, i miei test unitari non hanno bisogno di verificare esplicitamente le condizioni del post.

+0

Ha funzionato per me. Fai attenzione per "personaggio" – Oktay

6

Probabilmente si può utilizzare la nuova Comunità VS 2013, a patto che si soddisfano i requisiti di licenza: http://www.visualstudio.com/en-us/visual-studio-community-vs

Ecco come Visual Studio comunitario può essere utilizzato nelle organizzazioni:

un numero illimitato degli utenti di un'organizzazione possono utilizzare la community di Visual Studio per i seguenti scenari: in un'aula che apprende l'ambiente , per la ricerca accademica o per contribuire a progetti open source .

Per tutti gli altri scenari di utilizzo: nelle organizzazioni non aziendali , fino a 5 utenti possono utilizzare Visual Studio Community. Nelle organizzazioni aziendali (vale a dire con> 250 PC o> $ 1 milione di dollari annuali in entrate annuali), non è consentito utilizzare oltre la fonte aperta fonte, ricerca accademica e scenari di apprendimento in classe descritti sopra.

È fondamentalmente VS 2013 Professional gratuitamente, quindi è possibile installare l'estensione dei contratti di codice.

Problemi correlati