Si noti che questo potrebbe essere un duplicato di this question, non ne sono completamente sicuro.La riscrittura del contratto di codice non riesce con "Impossibile risolvere il riferimento membro"
Il mio problema è che ho un progetto di libreria di classi che ha un riferimento a una libreria di tipi di terze parti (COM). Voglio mettere contratti nelle metodi nella libreria di classi, in questo modo:
public class foo
{
public static int divide(TypeFromTypeLib tftl, int a, int b)
{
Contract.Requires<ArgumentException>(b != 0);
return a/b;
}
}
E poi avere un progetto client fare uso di questo metodo, per esempio
var n = foo.divide(null, 4, 2);
ma mi piacerebbe anche il progetto client utilizzano anche i contratti in alcuni dei suoi metodi. Quindi, ho impostato le proprietà dei Contratti di codice su entrambi i progetti su "Esegui controllo contratto di runtime" (senza il quale si ottiene il runtime asserendo che è necessario questa impostazione).
Ora, quando ho poi provo a compilare il client, ottengo il seguente errore:
Could not resolve member reference: my_class_lib.foo::divide.
ccrewrite : error : Rewrite aborted due to metadata errors.
Quale sembra inevitabile - ogni volta che un metodo viene chiamato, che ha un tipo dalla terza libreria dei tipi festa questo accade . Rimuovi il tipo dalla firma del metodo e va bene.
Qualcuno può spiegare perché questo accade? E 'un indizio che la struttura del mio codice sia fondamentalmente difettosa (se sì, perché?), O è un capriccio di contratti di codice? Esiste una soluzione consigliata per questo problema?
Ho ricevuto questo errore da ccrewrite, dai metodi in una libreria di prima parte che hanno incorporato i tipi di interoperabilità nella loro firma. – JamesFaix
Ho avuto il mio progetto aperto in VS2015 e passato a VS2013 e il problema è andato via. Il compilatore di Roslyn sembra trattare i tipi di interoperabilità incorporati in modo diverso rispetto al vecchio compilatore, ma non riesco a trovare alcuna documentazione o conversazione al riguardo. Forse correlato: http://stackoverflow.com/questions/35641972/why-does-visual-studio-2015-throw-more-cs1769-compiler-errors-than-vs2013 – JamesFaix
Quale versione dei contratti di codice hai installato? Fino al rilascio di v.1.10.10126.2-rc1 il 26 gennaio 2016 non ho mai ottenuto il controllo in fase di esecuzione dei contratti di codice che funzionano in Visual Studio 2015. Questa versione è la prima importante versione comunitaria di contratti di codice e indirizzi molto di problemi in sospeso. Può essere scaricato da: https://github.com/Microsoft/CodeContracts/releases. L'ho installato e il controllo runtime ora funziona ancora per me. –