2015-06-02 15 views
19

Ho creato un progetto di test C# in VS2015 RC. si costruisce a livello locale, ma quando tento di costruire sul nostro server CI build (TeamCity) non riesce con errori:Riferimento Microsoft.VisualStudio.QualityTools.UnitTestFramework per build CI

UnitTest1.cs (2,17): l'errore CS0234: Il tipo o dello spazio dei nomi nome 'VisualStudio' fa non esiste nello spazio dei nomi 'Microsoft' (sei un mancante un riferimento all'assembly?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj ] UnitTest1.cs (9,10): errore CS0246: il tipo o il nome dello spazio dei nomi "TestMethod" non è stato trovato (manca una direttiva using o un riferimento all'assembly?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP .MetadataService.Api.Tests.csproj] UnitTest1.cs (9,10): errore CS0246: il tipo o il nome dello spazio dei nomi "TestMethodAttribute" non è stato trovato (ti manca una direttiva o un riferimento all'assembly?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj] UnitTest1.cs (6,6): errore CS0246: il tipo o il nome dello spazio dei nomi Impossibile trovare 'TestClass' (manca una direttiva using o un riferimento all'assembly?) [D: \ BuildAgent \ work \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api .Tests.csproj] UnitTest1.cs (6,6): errore CS0246: il tipo o il nome dello spazio dei nomi 'TestClassAttribute' non è stato trovato (sei missi ng una direttiva using o un riferimento all'assembly) [D: \ BuildAgent \ lavori \ e486bf18e454d0c2 \ dh.PSP.Coordinator.Api.Tests \ dh.PSP.MetadataService.Api.Tests.csproj]?

Chiaramente, questo è dovuto al fatto che l'assembly che contiene questi spazi dei nomi (Microsoft.VisualStudio.QualityTools.UnitTestFramework) non si trova sul server di generazione, sul mio computer locale risiede in C: \ Programmi (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll. Immagino di poter copiare l'assembly nella mia soluzione in modo che diventi parte del codebase, ma spostare manualmente i file sembra un po 'poco elegante. Ho cercato in giro su NuGet e ho trovato http://www.nuget.org/packages/Microsoft.VisualStudio.QualityTools.UnitTestFramework/ che ho pensato che avrebbe fatto il trucco, ma l'installazione di tale pacchetto non riuscita con:

Installare-Pacchetto: Impossibile installare il pacchetto 'Microsoft.VisualStudio.QualityTools.UnitTestFramework 11.0.50727.1' . Si sta tentando di installare questo pacchetto in un progetto che ha come bersaglio ' .NETFramework, Version = v4.5.2' , ma il pacchetto non contiene alcun riferimenti di montaggio o file di contenuto che sono compatibili con quella quadro

Qual è la mia migliore opzione per risolvere questo problema? Sono sorpreso che la creazione di un progetto di test in VS2015 non includa automaticamente tutte le dipendenze di cui ho bisogno, anche se forse sono ingenuo (sono un po 'una neonata dot netter).

+3

Perché mai qualcuno potrebbe contrassegnarlo? È una domanda perfettamente valida. Sono uno sviluppatore di .net inesperto che, dopo aver trascorso un po 'di tempo su google e senza arrivare da nessuna parte, sta cercando indicazioni su come progredire. È così così elitario che non mi è permesso farlo? Sul serio? – jamiet

+0

@jaimiet Ho avuto lo stesso problema, sul tuo agente TeamCity stai costruendo sotto Mono su Linux? Mono non fornisce quella libreria come parte della sua distribuzione. Se è .NET sotto Windows, hai alcune opzioni per installarlo. – TylerY86

risposta

2

Hmm Ho alcune idee, in modo da scegliere quello che meglio si adatta alle vostre esigenze

  1. Una risposta semplice dovrebbe essere marcare la DLL per copiare locale e utilizzare una cartella come assembly nella stessa cartella della soluzione e riferimenti "Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll"
  2. Installare Visual Studio nel server di build. Suona i dadi, ma è la a più vicino 'macchina developer' che si ha.
  3. Installare il DLL in the GAC in modo da non dover perdere tempo con questo.
  4. Fissare la package NuGet (Aggiunta di un punto di riferimento per la versione di .NET Framework) e usarlo.
  5. downgrade la versione di .NET Framework in modo da poter usare il pacchetto NuGet.
  6. Creare il proprio server di NuGet! (e aggiungere il riferimento del DLL necessarie)

IMHO Vorrei scegliere la prima risposta, perché sembra essere il "modo migliore" per utilizzare NuGet per risolvere tutti i problemi dei pacchetti ma si sta utilizzando una DLL che non si sa se dovrebbe essere attendibile.

Nel sistema utilizzato in "vecchi" linguaggi come C o C++ è comune scaricare il codice sorgente e le librerie necessarie per l'esecuzione del codice, quindi non penso che il pacchetto NuGet sia la soluzione migliore.

Utilizzando la prima opzione si ha sempre la stessa versione e si può controllare l'MD5 del file e sapere esattamente cosa è in esecuzione nel proprio server di build.

Forse la vera opzione migliore dovrebbe essere 6. Quando si utilizza il proprio server NuGet per gestire le DLL rendendo il live più fantastico e affidabile.

+2

Oppure eviti tutto quell'orrore usando xunit, nunit ... qualsiasi cosa non provenga da Microsoft. – Sam

+0

Mi sono imbattuto in questo problema in un paio di progetti che possiedo, che effettivamente usano NUnit, ma alcuni riferimenti sono venuti insieme ad alcuni dei progetti di test. Non me ne sono reso conto finché non li ho inseriti nel nostro sistema TeamCity. –

2

La risposta è simile all'opzione 1 in eng.augusto's answer.
Microsoft non fornisce NuGet per l'ultima versione di Microsoft.VisualStudio.QualityTools.UnitTestFramework, ma fornirle come parte di Visual Studio (normally at C: \ Program Files (x86) \ Microsoft Visual Studio \ 2017 \ Enterprise \ Common7 \ IDE \ PublicAssemblies \ Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll)

ho creato le Microsoft.VisualStudio.QualityTools cartella come sottocartella della mia soluzione e copiato

Microsoft.VisualStudio.QualityTools.UnitTestFramework. dll Microsoft.VisualStudio.QualityTools.UnitTestFramework.xml

I file devono essere aggiunti al controllo del codice sorgente (anche se le DLL vengono solitamente ignorate).
Quindi ho cambiato i riferimenti nel mio Test.csproj per fare riferimento a una nuova posizione.

+0

Non è vero. Vedi la mia risposta. – notlkk

+0

@notlkk: Dov'è la tua risposta?L'ho visto, ma ora è scomparso. –

0

Per progetti creati in VS 2017. Aggiunta del pacchetto Nuget Microsoft.VisualStudio.QualityTools.UnitTestFramework.Updated consente di creare progetti di unit test su CI senza VS installato sul server di build.

Problemi correlati