2013-03-20 8 views
5

Ho un progetto che utilizza Autofac, e l'integrazione WebAPIFxCop indiretto riferimento alla versione 2.0.5.0 System.Core

Corriamo FxCop sopra la nostra soluzione, e in apertura autofac, ottengo il seguente:

Impossibile trovare il seguente riferimento indiretto. Questo assembly non è richiesto per l'analisi, tuttavia, senza di esso, i risultati dell'analisi potrebbero essere incompleti. Questo è stato fatto riferimento assemblare da Autofac.dll

System.Core, Version = 2.0.5.0, Culture = neutral, PublicKeyToken = 7cec85d7bea7798e, reindirizzabile = Sì

Questo fa sì che il seguente errore sul nostro CI server:

FxCop codice di ritorno (516): PROJECT_LOAD_ERROR ASSEMBLY_REFERENCES_ERROR

C'è un modo per dire a FxCop di ignorarlo?

risposta

9

Aveva lo stesso problema con AutoMapper 3.1.0 sul nostro progetto. Il vero problema è una vecchia versione di FxCop. L'ultima release ufficiale è stata FxCop 10.0, ma le nuove versioni di FxCop è stato fornito in bundle con Visual Studio dal 2012. Ho appena sostituito il FxCop 10,0 con la versione che si possono trovare in:

  • C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Strumenti Team \ Static Analysis Tools \ FxCop

o

  • C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Strumenti Team \ strumenti di analisi statica \ FxCop

e il problema è stato risolto.

+0

Questo è ciò che ha funzionato per me. Grazie. – slolife

+0

Questa dovrebbe essere la risposta accettata. Se è stato eseguito su un server di build, questo collegamento potrebbe essere interessante per qualcuno: http://stackoverflow.com/questions/21729066/running-code-analysis-fxcop-12-0-on-build-agent-without-installing- visual-perno/21731245 –

1

È necessario aggiungere un riferimento alla directory dell'assembly nel file di progetto FxCop. Ad esempio:

<Targets> 
    <AssemblyReferenceDirectories> 
    <Directory>C:/Windows/Microsoft.NET/assembly/GAC_MSIL/Microsoft.Web.Infrastructure/v4.0_1.0.0.0__31bf3856ad364e35/</Directory> 
    <Directory>C:/Windows/Microsoft.NET/assembly/GAC_MSIL/System.Web.Mvc/v4.0_3.0.0.0__31bf3856ad364e35/</Directory> 
    </AssemblyReferenceDirectories> 
+0

come funzionerebbe nel caso del nostro server CI? – Alex

+0

Come non funziona? Si esegue FxCop utilizzando il percorso per il proprio file di progetto. Senza questo file di progetto, FxCop non viene eseguito. Questo file di progetto sarà nel controllo del codice sorgente (probabilmente nella directory della soluzione), quindi il server CI ha accesso a questo file. – Steven

+0

il problema è che non abbiamo quella DLL (System.Core v 2.0.5.0) nel nostro gac/ovunque .... e non volevamo davvero installare Silverlight sulle nostre macchine dev/ci server – Alex

3

Questa è una cosa FxCop comune quando si esegue con librerie di classi portatili. Non è Autofac; ti capita di vederlo perché Autofac è l'unico PCL che stai usando. Nella mia esperienza, questo errore non sembra accadere se stai costruendo su un computer Windows 8, ma su Windows 7 o Server 2008R2 lo vedo molto.

Non è un bug e no, non troverai 2.0.5.0 sul tuo computer. Quella versione è in realtà per Silverlight e runtime .NET "stuff" gestisce il reindirizzamento alla giusta versione di assemblaggio. Sfortunatamente, FxCop è meno cooperativo.

vedo la stessa cosa nella mia corporatura e risolto utilizzando i suggerimenti da domande come questa: How to fix FxCop error code 512?

1

soluzione di questo problema è quello di copiare lo System.Core.dll mancante nella directory di output del progetto. Ho fatto questo come un evento postbuild per copiare System.Core.dll da una cartella condivisa per proiettare la directory \ bin. È possibile ottenere la copia di System.Core.dll dall'installazione di Silverlight SDK 2.

Ora fxcop viene eseguito correttamente senza problemi. Nota che stavo usando l'integratore Fxcop per Visual Studio 2010.