Fatti:
Fatti:
A. A seguito di un controllo del conteggio salari eseguito il 3 aprile 2003, la Cassa di compensazione del Cantone Ticino ha accertato che negli anni sottoposti a verifica (1999-2002) la D._ SA aveva corrisposto a B._ retribuzioni per complessivi fr. 155'077.- (fr. 146'987.- per salario e fr. 8'090.- per spese non ammesse), sulle quali non erano stati prelevati i contributi AVS/AI/IPG/AD e AF.
Ritenendo queste retribuzioni provento da attività lucrativa dipendente, la Cassa, con decisione di tassazione d'ufficio 3 luglio 2003, ha fissato l'importo a carico di D._ SA in fr. 24'321.25 e con ulteriore decisione, di stessa data, ha preteso da B._ l'importo di fr. 10'157.55.
L'8 agosto 2003 la Cassa ha confermato i propri provvedimenti e rigettato le opposizioni formulate dagli interessati.
L'8 agosto 2003 la Cassa ha confermato i propri provvedimenti e rigettato le opposizioni formulate dagli interessati.
B. Contro le decisioni su opposizione D._ SA, patrocinata dall'avv. Rossano Guggiari, Agno, e B._, rappresentato dall'avv. Stefano Zanetti, Bellinzona, si sono aggravati al Tribunale cantonale delle assicurazione. In sostanza entrambi gli insorgenti asseveravano che B._ non era mai stato alle dipendenze della società, ma che la ditta C._ & Co. (società in nome collettivo) aveva eseguito prestazioni per la D._ SA così come aveva fatto per almeno altri cinquanta clienti.
Con giudizio 8 novembre 2004, l'autorità di ricorso cantonale, dopo aver congiunto i gravami di D._ SA e B._, li ha respinti. I primi giudici hanno ritenuto che le retribuzioni versate a B._ fossero da considerare come salario determinante proveniente da un'attività dipendente, perché l'interessato percepiva regolarmente alla fine di ogni mese una paga, era inserito nell'organigramma della società e, infine, perché aveva svolto l'apprendistato formativo presso la medesima società.
Con giudizio 8 novembre 2004, l'autorità di ricorso cantonale, dopo aver congiunto i gravami di D._ SA e B._, li ha respinti. I primi giudici hanno ritenuto che le retribuzioni versate a B._ fossero da considerare come salario determinante proveniente da un'attività dipendente, perché l'interessato percepiva regolarmente alla fine di ogni mese una paga, era inserito nell'organigramma della società e, infine, perché aveva svolto l'apprendistato formativo presso la medesima società.
C. B._, sempre assistito dall'avv. Zanetti, interpone ricorso di diritto amministrativo al Tribunale federale delle assicurazioni, chiedendo l'annullamento del giudizio querelato. La Cassa postula la reiezione del gravame, D._ SA ne propone invece l'accoglimento, mentre l'Ufficio federale delle assicurazioni sociali ha rinunciato a determinarsi.
Contro la pronuncia cantonale si è pure aggravata, con il patrocinio dell'avv. Guggiari, D._ SA, la quale, al pari dell'altro insorgente, postula l'annullamento del giudizio di prime cure. Mentre la Cassa postula la reiezione del gravame, B._ e l'Ufficio federale delle assicurazioni sociali si sono astenuti da una presa di posizione.
Dei motivi invocati dalle parti si dirà, per quanto occorra, nei considerandi.
Contestualmente ad entrambi i gravami le parti interessate hanno allegato per la prima volta - ritenendo l'istruttoria condotta dai primi giudici carente - le dichiarazioni datate 30 novembre 2004 di G._, contabile della D._ SA, e di V._ (moglie di B._ e socia, con il marito, della ditta C._ & Co.), a sostegno della tesi difensiva.

Diritto:
Diritto:
1. I ricorsi di B._ e D._ SA concernono fatti di ugual natura e pongono gli stessi temi di diritto materiale, per cui si giustifica la congiunzione delle cause e la resa di una sola sentenza (<ref-ruling> consid. 1 e riferimenti; cfr. pure <ref-ruling> consid. 1).
1. I ricorsi di B._ e D._ SA concernono fatti di ugual natura e pongono gli stessi temi di diritto materiale, per cui si giustifica la congiunzione delle cause e la resa di una sola sentenza (<ref-ruling> consid. 1 e riferimenti; cfr. pure <ref-ruling> consid. 1).
2. 2.1 La presente vertenza concerne la determinazione e la pretesa di contributi paritetici e non già l'assegnazione o il rifiuto di prestazioni assicurative. Il Tribunale federale delle assicurazioni deve pertanto limitarsi ad esaminare se il giudizio di primo grado abbia violato il diritto federale, compreso l'eccesso o l'abuso del potere d'apprezzamento, oppure se l'accertamento dei fatti sia manifestamente inesatto, incompleto o avvenuto violando norme essenziali di procedura (art. 132 OG in relazione con gli art. 104 lett. a e b e 105 cpv. 2 OG). D'altra parte, essendo controverse contribuzioni pubbliche, questa Corte non è vincolata dalle conclusioni delle parti (art. 114 cpv. 1 OG).
2.2 Le decisioni amministrative in lite hanno per oggetto anche la richiesta di contributi per assegni familiari (AF). Ora, per quel che riguarda questi ultimi, essi attengono alla legislazione cantonale, per cui sfuggono al controllo giudiziale del Tribunale federale delle assicurazioni, il quale è legittimato a statuire unicamente circa gli oneri di diritto federale (<ref-ruling> consid. 1 e riferimento). Nella misura in cui riguardano simili contributi, i ricorsi di diritto amministrativo sono quindi irricevibili.
2.3 Va da ultimo ancora rilevato che con l'entrata in vigore, il 1° gennaio 2003, della legge federale sulla parte generale del diritto delle assicurazioni sociali (LPGA) del 6 ottobre 2000, sono state apportate diverse modifiche alla LAVS. Tuttavia, nel caso concreto si applicano le disposizioni in vigore fino al 31 dicembre 2002 poiché da un punto di vista temporale sono di principio determinanti le norme (materiali) in vigore al momento della realizzazione dello stato di fatto (in concreto: lo svolgimento dell'attività lavorativa e la sua remunerazione negli anni 1999-2002) che deve essere valutato giuridicamente o che produce conseguenze giuridiche (<ref-ruling> consid. 1.2; per quanto attiene per contro alle disposizioni formali della LPGA, immediatamente applicabili con la loro entrata in vigore al 1° gennaio 2003, cfr. <ref-ruling> consid. 3.2).
2.3 Va da ultimo ancora rilevato che con l'entrata in vigore, il 1° gennaio 2003, della legge federale sulla parte generale del diritto delle assicurazioni sociali (LPGA) del 6 ottobre 2000, sono state apportate diverse modifiche alla LAVS. Tuttavia, nel caso concreto si applicano le disposizioni in vigore fino al 31 dicembre 2002 poiché da un punto di vista temporale sono di principio determinanti le norme (materiali) in vigore al momento della realizzazione dello stato di fatto (in concreto: lo svolgimento dell'attività lavorativa e la sua remunerazione negli anni 1999-2002) che deve essere valutato giuridicamente o che produce conseguenze giuridiche (<ref-ruling> consid. 1.2; per quanto attiene per contro alle disposizioni formali della LPGA, immediatamente applicabili con la loro entrata in vigore al 1° gennaio 2003, cfr. <ref-ruling> consid. 3.2).
3. Nel caso di specie è controversa la questione della qualifica giuridica quale dipendente o indipendente dell'attività esercitata da B._ per la D._ SA nel periodo dal 1999 al 2002.
3.1 Nel proprio gravame sia B._ che D._ SA contestano le conclusioni dei primi giudici, in primo luogo per motivi d'ordine formale e inoltre anche per ragioni di merito.
Essi lamentano in particolare una violazione del diritto di essere sentito per avere i giudici cantonali, nonostante la richiesta più volte formulata, omesso di assumere le prove da loro ritenute giuridicamente rilevanti - quali l'audizione di B._, di P._ (direttore della D._ SA), di U._ (fiduciario della C._ & Co.) e dei revisori della D._ SA, nonché il sopralluogo negli uffici di D._ SA e di C._ & Co. - che avrebbero permesso di dimostrare la qualità di indipendente di B._ anche nei rapporti contrattuali intercorsi con la D._ SA.
3.2 Ai sensi dell'art. 29 cpv. 2 Cost. le parti hanno diritto d'essere sentite. Per costante giurisprudenza, dal diritto di essere sentito deve in particolare essere dedotto il diritto per l'interessato di esprimersi prima della resa di una decisione sfavorevole nei suoi confronti, quello di fornire prove circa i fatti suscettibili di influire sul provvedimento, quello di poter prendere visione dell'incarto, quello di partecipare all'assunzione delle prove, di prenderne conoscenza e di determinarsi al riguardo (<ref-ruling> consid. 2.2, 127 I 56 consid. 2b, 127 III 578 consid. 2c, 126 V 131 consid. 2b; cfr., riguardo al previgente art. 4 cpv. 1 vCost., la cui giurisprudenza si applica anche alla nuova norma, <ref-ruling> consid. 2a/aa, 124 V 181 consid. 1a, 375 consid. 3b e sentenze ivi citate).
ll diritto di essere sentito comprende pure la pretesa di ottenere una decisione motivata, che impone all'autorità di pronunciarsi nei considerandi sulle allegazioni delle parti, riferendosi agli argomenti da esse addotti. Siffatto obbligo intende evitare che l'autorità, nell'esercizio dei suoi poteri decisionali, si lasci guidare da ragioni non pertinenti e, d'altro canto, consentire al cittadino di farsi una chiara idea della portata della decisione che lo riguarda per poterla, se del caso, impugnare. A tale fine, ogni atto decisionale deve menzionare, anche se brevemente, le considerazioni che ne hanno determinato il convincimento, ritenuto comunque che l'autorità non è tenuta a prendere esplicitamente posizione su ogni allegazione di fatto o di diritto, ma può limitarsi ai punti essenziali e all'esame delle argomentazioni di parte atte a influire sul giudizio (<ref-ruling> consid. 3b; Albertini, Der verfassungsmässige Anspruch auf rechtliches Gehör im Verwaltungsverfahren des modernen Staates, tesi Berna 2000, pag. 368 con numerosi rinvii).
ll diritto di essere sentito comprende pure la pretesa di ottenere una decisione motivata, che impone all'autorità di pronunciarsi nei considerandi sulle allegazioni delle parti, riferendosi agli argomenti da esse addotti. Siffatto obbligo intende evitare che l'autorità, nell'esercizio dei suoi poteri decisionali, si lasci guidare da ragioni non pertinenti e, d'altro canto, consentire al cittadino di farsi una chiara idea della portata della decisione che lo riguarda per poterla, se del caso, impugnare. A tale fine, ogni atto decisionale deve menzionare, anche se brevemente, le considerazioni che ne hanno determinato il convincimento, ritenuto comunque che l'autorità non è tenuta a prendere esplicitamente posizione su ogni allegazione di fatto o di diritto, ma può limitarsi ai punti essenziali e all'esame delle argomentazioni di parte atte a influire sul giudizio (<ref-ruling> consid. 3b; Albertini, Der verfassungsmässige Anspruch auf rechtliches Gehör im Verwaltungsverfahren des modernen Staates, tesi Berna 2000, pag. 368 con numerosi rinvii).
3.3 3.3.1 I ricorrenti censurano l'accertamento lacunoso dei fatti su cui si fonda il giudizio cantonale, in quanto non sarebbe loro stato permesso di dimostrare le peculiarità del rapporto tra B._/C._ & Co. e D._ SA, i primi giudici non avendo assunto i mezzi di prova rilevanti, benché essi siano stati da loro offerti ritualmente e ripetutamente.
Siffatta argomentazione è di pregio. Infatti dalla documentazione agli atti riferita all'incarto cantonale relativo a B._ emerge che:
a) con ricorso 3 settembre 2003 B._ ha chiesto l'audizione testimoniale di P._, direttore della D._ SA, per dimostrare i fatti allegati dal punto 1 al punto 12,
b) a seguito del termine di 10 giorni assegnato il 24 settembre 2003 dal Tribunale cantonale per presentare ulteriori mezzi di prova, B._ con atto 2 ottobre 2003 ha segnatamente chiesto l'audizione di P._ e U._ della E._ SA, il sopralluogo negli uffici della D._ SA e della C._ & Co. nonché il richiamo dell'organigramma D._ SA,
c) con ordinanza 15 ottobre 2003 il Tribunale cantonale ha inviato al patrocinatore di B._ un atto istruttorio, assegnandogli un termine di 10 giorni per presentare osservazioni scritte,
d) con osservazioni 24 ottobre 2003 B._ ha nuovamente richiesto l'assunzione dei mezzi di prova ripetutamente indicati,
e) con ulteriore ordinanza 12 novembre 2003 i primi giudici hanno trasmesso al patrocinatore di B._ un nuovo atto istruttorio, assegnandogli un termine di 5 giorni per presentare eventuali osservazioni scritte,
f) con scritto 18 novembre 2003 B._ si è determinato sulla base di fatti per i quali necessitavano i mezzi di prova già indicati in precedenza,
g) con ordinanza 28 luglio 2004 la Corte cantonale citava le parti per l'udienza del 14 settembre 2004 onde procedere alla "discussione di causa alla presenza del sig. B._",
h) dal verbale dell'udienza del 14 settembre 2004 si evince che B._ è stato sentito informalmente nell'ambito della "discussione di causa".
Per quanto riguarda gli atti riferiti all'incarto cantonale relativo a D._ SA risulta inoltre che:
a) con ricorso 8 settembre 2003 D._ SA ha elencato tutta una serie di mezzi di prova tra cui l'audizione di testi,
b) con ordinanza 24 settembre 2003 i primi giudici hanno assegnato a D._ SA un termine di 10 giorni per presentare ulteriori mezzi di prova,
c) con atto 30 settembre 2003 la D._ SA ha indicato vari mezzi di prova, tra cui l'audizione quale teste di B._,
d) dal verbale dell'udienza del 14 settembre 2004 si evince tra l'altro a pag. 2: "Viene mostrato al sig. B._ e all'avv. Guggiari l'organigramma D._ SA ...... da cui si desume come al vertice della piramide ossia (recte: vi sia) P._, l'avv. Guggiari specifica che si tratta di un documento che egli non ha mai visto, ma che rappresenta al più un organigramma funzionale. Non significa evidentemente che il sig. B._ fosse un dipendente della D._ SA",
e) con scritto 21 settembre 2004 D._ SA ha formulato varie considerazioni sulla "questione del famoso organigramma" e chiesto l'assunzione dei testi P._, A._, R._ e O._.
3.3.1 Orbene, a fronte di siffatto comportamento processuale coerente da parte di ambo i ricorrenti volto a far assumere quei mezzi di prova a loro dire necessari per dimostrare le loro argomentazioni, la Corte cantonale - malgrado la difficoltà intrinseca che connota la qualifica giuridica di dipendente o indipendente dell'attività svolta da B._ per la D._ SA - ha ritenuto di poter emettere il proprio giudizio sulla base di quanto già vi era agli atti con la seguente apodittica motivazione: "siccome la presente causa ha potuto essere decisa sulla scorta degli atti già a disposizione di questo TCA, che appaiono chiari, illuminanti ed ancora non contestati nel loro contenuto, lo stesso rinuncia all'assunzione di ulteriori prove", tra cui "l'audizione degli altri testi indicati", considerato che "nelle more istruttorie sia stato dato seguito all'audizione del ricorrente B._".
È di tutta evidenza come non si possano seguire i primi giudici quando asseverano che non occorra procedere all'assunzione delle prove ripetutamente offerte e indicate dai ricorrenti solo perché agli atti già vi erano elementi tali da consentire la reiezione dei gravami.
Non si tratta infatti di risolvere gli elementi fattuali unicamente in termini unidirezionali quando si reputa che con il materiale probatorio a disposizione sia possibile giudicare, ma occorre rendere giustizia, tenendo conto anche delle considerazioni e dei mezzi di prova offerti dalle parti in modo tempestivo oltre che reiterato, a meno che si dia loro ragione comunque. Prima di poter dire che nessun fatto rilevante a favore dei ricorrenti potrebbe essere da loro dimostrato, occorre conoscere il valore e la portata di ogni mezzo di prova correttamente offerto.
I giudici cantonali si sono richiamati alla loro facoltà di un apprezzamento anticipato delle prove. Questo modo di procedere è in linea di principio certamente legittimo. Infatti, se gli accertamenti svolti d'ufficio permettono all'amministrazione o al giudice, che si sono fondati su un apprezzamento diligente delle prove, di giungere alla convinzione che certi fatti presentino una verosimiglianza preponderante e che ulteriori misure probatorie non potrebbero modificare questo apprezzamento, è superfluo assumere altre prove (apprezzamento anticipato delle prove; Kieser, Das Verwaltungsverfahren in der Sozialversicherung, pag. 212 no. 450; Kölz/Häner, Verwaltungsverfahren und Verwaltungsrechtspflege des Bundes, 2a ed., pag. 39 no. 111 e pag. 117 no. 320; Gygi, Bundesverwaltungsrechtspflege, 2a ed., pag. 274; cfr. anche <ref-ruling> consid. 4a, 122 III 223 consid. 3c, 120 Ib 229 consid. 2b, 119 V 344 consid. 3c e riferimenti). In tal caso non sussiste una violazione del diritto di essere sentito conformemente all'art. 29 cpv. 2 Cost. (SVR 2001 IV no. 10 pag. 28 consid. 4b; cfr., riguardo al previgente art. 4 cpv. 1 vCost., la cui giurisprudenza si applica anche alla nuova norma, <ref-ruling> consid. 4b, 122 V 162 consid. 1d e sentenza ivi citata).
Nel caso di specie, l'autorità giudiziaria inferiore ha ritenuto che tutti i mezzi di prova offerti dai ricorrenti e non assunti fossero inidonei a modificare il loro apprezzamento. Per poterne dichiarare d'acchito l'inutilità occorreva però saperne il contenuto, circostanza questa che è stata disattesa dai primi giudici che si sono limitati a seguire integralmente l'argomentazione della Cassa.
Ne consegue che vi è stato in tutta evidenza un accertamento lacunoso dei fatti riconducibile alla violazione del diritto di essere sentito dei ricorrenti, considerato altresì che l'istruttoria è stata chiusa senza averne previamente dato comunicazione alle parti. Il giudizio cantonale non ossequia i requisiti minimi posti all'esame delle allegazioni di parte ai sensi dell'art. 29 cpv. 2 Cost., atteso che non è sufficiente argomentare che le istanze di audizione erano state formulate in via generica, quando, come già si è detto, non è stata data l'opportunità alle parti di assumere le prove offerte e nemmeno di comprendere come l'istruttoria si fosse conclusa. Questo modus operandi lesivo dei diritti procedurali delle parti ha loro impedito di concretizzare le domande da rivolgere ai vari testi indicati. Ciò vale anche per quanto riguarda gli altri mezzi di prova.
3.3.2 Nemmeno può essere seguito il Tribunale cantonale quando reputa di avere "nelle more istruttorie dato seguito all'audizione del ricorrente B._".
Occorre infatti precisare in questo contesto che è vero che B._ è stato sentito nell'ambito della "discussione della causa" (cfr. verbale dell'udienza 14 settembre 2004). È però anche vero che egli è stato sentito non come teste (art. 227 segg. CPC [Codice di procedura civile ticinese, in: RL 3.3.2.1]) e nemmeno come parte secondo le modalità previste dagli art. 270 segg. CPC, con le comminatorie di sanzione penale ex art. 306 CP (Codice penale svizzero) previste espressamente agli art. 235 CPC per i testi e 274 CPC per le parti, applicabili nella procedura davanti al Tribunale cantonale delle assicurazioni in virtù del rinvio dell'art. 23 della legge di procedura per le cause davanti a detto Tribunale (cfr. RL 3.4.1.1).
Detto altrimenti, nel corso dell'udienza del 14 settembre 2004 davanti alla Corte cantonale B._ è stato sentito informalmente e le sue dichiarazioni valgono, dal profilo procedurale, solo quali semplici affermazioni di parte, con la stessa valenza probatoria di una mera allegazione contenuta nelle memorie di causa. La sola rilevanza è quella di poter usare le sue affermazioni nella misura in cui gli sono sfavorevoli.
Ne consegue che anche B._ dovrà essere sentito: se come teste (su ricorso di D._ SA) o come parte (su ricorso di B._), sarà il giudice cantonale a doversi determinare.
3.4 Tenuto conto della natura formale del diritto di essere sentito e considerati il potere d'esame limitato di cui fruisce nella fattispecie questa Corte (cfr. consid. 2.1) nonché la rilevanza dei vizi in esame, gli stessi non possono essere sanati in procedura federale (cfr. <ref-ruling> consid. 5a e riferimenti). A prescindere dalle possibilità di successo nel merito delle impugnative, la pronunzia querelata deve quindi essere annullata e la causa rinviata all'istanza cantonale perché ponga rimedio alle carenze sul piano dell'istruzione e disponga l'assunzione dei mezzi di prova richiesti dai ricorrenti.
3.4 Tenuto conto della natura formale del diritto di essere sentito e considerati il potere d'esame limitato di cui fruisce nella fattispecie questa Corte (cfr. consid. 2.1) nonché la rilevanza dei vizi in esame, gli stessi non possono essere sanati in procedura federale (cfr. <ref-ruling> consid. 5a e riferimenti). A prescindere dalle possibilità di successo nel merito delle impugnative, la pronunzia querelata deve quindi essere annullata e la causa rinviata all'istanza cantonale perché ponga rimedio alle carenze sul piano dell'istruzione e disponga l'assunzione dei mezzi di prova richiesti dai ricorrenti.
4. Non trattandosi in concreto di una lite avente per oggetto l'assegnazione o il rifiuto di prestazioni assicurative, la procedura non è gratuita (art. 134 OG e contrario). Le spese processuali, che seguono la soccombenza, devono pertanto essere messe a carico della Cassa opponente, la quale verserà altresì a B._ e a D._ SA, assistiti da un legale, fr. 2'000.- ciascuno a titolo di indennità di parte in sede federale (art. 135 in relazione con l'art. 156 cpv. 1 OG).

Per questi motivi, il Tribunale federale delle assicurazioni pronuncia:
Per questi motivi, il Tribunale federale delle assicurazioni pronuncia:
1. In quanto ricevibili, i ricorsi di diritto amministrativo sono accolti nel senso che, annullato il querelato giudizio 8 novembre 2004 nella misura in cui è riferito ai contributi di diritto federale, gli atti sono rinviati al Tribunale delle assicurazioni del Cantone Ticino perché proceda conformemente ai considerandi e renda una nuova pronunzia.
1. In quanto ricevibili, i ricorsi di diritto amministrativo sono accolti nel senso che, annullato il querelato giudizio 8 novembre 2004 nella misura in cui è riferito ai contributi di diritto federale, gli atti sono rinviati al Tribunale delle assicurazioni del Cantone Ticino perché proceda conformemente ai considerandi e renda una nuova pronunzia.
2. Le spese giudiziarie, fissate in complessivi fr. 3'600.-, sono poste a carico della Cassa di compensazione opponente.
2. Le spese giudiziarie, fissate in complessivi fr. 3'600.-, sono poste a carico della Cassa di compensazione opponente.
3. L'anticipo di fr. 1'800.- versato da ciascuno dei ricorrenti viene retrocesso.
3. L'anticipo di fr. 1'800.- versato da ciascuno dei ricorrenti viene retrocesso.
4. La Cassa di compensazione rifonderà a ciascun ricorrente la somma di fr. 2'000.- (comprensiva dell'imposta sul valore aggiunto) a titolo di indennità di parte per la procedura federale.
4. La Cassa di compensazione rifonderà a ciascun ricorrente la somma di fr. 2'000.- (comprensiva dell'imposta sul valore aggiunto) a titolo di indennità di parte per la procedura federale.
5. La presente sentenza sarà intimata alle parti, al Tribunale cantonale delle assicurazioni, Lugano, e all'Ufficio federale delle assicurazioni sociali.