Sto lavorando alla creazione di un buildserver per il nostro squadra.Microsoft (TFS) Build server - Il tipo o il nome dello spazio dei nomi '...' non esiste nello spazio dei nomi '...' (manca un riferimento all'assembly?)
Sfondo
Stiamo utilizzando Microsoft Visual Studio 2010 Ultimate. Il nostro prodotto contiene codice C# (principalmente), DLL esterne e codice C. Stiamo lavorando con .Net 4.0 e abbiamo più di 70 progetti.
Stiamo lavorando con 3 rami del nostro codice:
- Produzione branche (ciò che è attualmente rilasciato)
- prova branche (hot fix, correzioni di bug, test utente finale)
- Sviluppo branche (aggiungendo nuovi feticci)
Tutti i rami sono sotto il controllo della sorgente TF.
Goal
Quello che vogliamo è avere un server di build per creare ed eseguire tutti i test di unità per tutti i rami una volta al giorno, il server di generazione dovrebbe utilizzare il codice nel controllo del codice sorgente. Il nostro obiettivo è avere un rapido rilevamento degli errori standard. Preferiremmo il mantenimento del server di compilazione come minimo o nullo.
Non useremo le build prodotte da buildserver, tutto ciò che vogliamo è utilizzare il build server per creare e testare continuamente le nostre filiali.
Cosa è impostato
momento non ci sono istituiti due la definizione di compilazione, uno per il Branche test e uno per la Branche sviluppo, sia costruire definizioni che prendono il codice dal controllo del codice sorgente (che parte funziona tutto bene), ma qui è dove inizia il divertimento.
Problema
La Branche test può costruire e unit test run tutti bene.
La Branche Lo sviluppo non può costruire a causa di un (o come 5 di) errori:
The type or namespace name 'XXX' does not exist in the namespace 'YYY' (are you missing an assembly reference?)
L'errore è per il progetto X refereing a progetto Y. Entrambi progetto X e Y è C# .Net 4.0 progetti e abbiamo il pieno controllo su entrambi, sia X che Y sono compilati in DLL. Il progetto Y contiene un'interfaccia che le classi del progetto X stanno implementando.
Il fastidioso dettaglio è che non ci sono differenze nel Test Branche e nello Sviluppo Brance per entrambi i progetti X o Y. I due progetti sono stati completamente identici negli ultimi 3 mesi.
Quindi la domanda è: perché funziona nel Test Branche ma non nella branca di sviluppo?
Ho testato:
- I progetti sono correttamente riferiti l'uno all'altro. - Tutti e 3 i rami non hanno problemi a costruire da soli/nessuno dei miei computer di sviluppo dei miei colleghi (abbiamo testato su 5 macchine diverse). - Ho provato a cancellare l'intero progetto X e ricrearlo, non ha funzionato. - Ho provato a cancellare l'intero progetto Y e ricrearlo, non ha funzionato. - Ho provato a cambiare lo spazio dei nomi per il progetto del progetto X e le sue classi, non ha funzionato. - Ho provato a cambiare lo spazio dei nomi per il progetto del progetto Y e le sue classi, non ha funzionato. - (Ho anche riavviato la mia macchina di sviluppo) - Tutte le modifiche sono sempre state controllate nel controllo del codice sorgente dopo che il build server è stato impostato per la compilazione.
Ulteriori informazioni
Ho scavato intorno nelle file di log e ho trovato alcuni dettagli interessting, questo è per i dettagli del progetto di costruzione X nello Sviluppo Branche
Task "AssignProjectConfiguration"
Project reference "..\..\A" has been assigned the "Debug|x86" configuration.
Project reference "..\..\Y" has been assigned the "Debug|x86" configuration. (can see there is a project Y)
Project reference "..\..\B" has been assigned the "Debug|x86" configuration.
Ma poi nel Task “ResolveAssemblyReference”
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
(----- Missing project Y -----)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
Dove nel Brance prova per lo stesso compito
Task "ResolveAssemblyReference"
TargetFrameworkMoniker:
.NETFramework,Version=v4.0
TargetFrameworkMonikerDisplayName:
.NET Framework 4
TargetedRuntimeVersion:
v4.0.30319
Assemblies:
System
System.Data.Entity
System.Xml.Linq
System.Data.DataSetExtensions
Microsoft.CSharp
System.Data
System.Xml
System.Core
AssemblyFiles:
C:\Builds\1\A
C:\Builds\1\B
C:\Builds\1\Y (There it is)
C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\mscorlib.dll
così ci si sente come se per qualche motivo solo “dimentica” il riferimento da progetto a progetto X Y.
Aiuto
Se si costruisce con il dettaglio di registrazione MSBuild impostato su Dettagliato o Diagnostico, è necessario sputare molte più informazioni durante l'attività ResolveAssemblyReference, incluso ogni luogo cercato e non ha trovato alcun riferimento. Questo ha qualche avvertimento/errore? –
Poco prima del task "ResolveAssemblyReference" viene visualizzato questo avviso: 'Task" Avviso " c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (1200,9): avviso: il progetto di riferimento '.. \ Y' non esiste. [C: \ Builds \ 1 \ X] Compito eseguito "Avvertenza" .' –
Riesco a vedere in precedenza nel file di registro: "Non copia dal file" C: \ Builds \ 1 \ ... \ ... \ y "per file" C: \ Builds \ 1 \ y "perché il parametro" SkipUnchangedFiles "era impostato su" true "nel progetto e le dimensioni dei file e le marche temporali coincidevano. Quindi sembra che dovrebbe essere lì E inoltre, la Y dll viene inviata alla posizione di rilascio, ma X dll non lo è. Quindi la Y dll è compilata. –