Domanda

Ultimamente sto lavorando su un paio di applicazioni .NET piccole che condividono un codice comune. Il codice ha alcune interfacce introdotte per astrarre I / O richiede unit testing.

Volevo che le applicazioni siano EXE standalone senza dipendenze esterne. Questo mi sembra il caso d'uso perfetta per le librerie statiche. Vieni a pensarci bene fornitori di terze parti di controllo potrebbero trarre beneficio da questo modello anche.

Ci sono alcune brutture nascoste con librerie statiche che ho perso?

C'è qualche motivo per cui i progettisti C # li lasciati fuori?

Edit: Sono consapevole di ILMerge ma non offre la stessa comodità di librerie statiche

.
È stato utile?

Soluzione

.NET in effetti sostenere l'equivalente morale di una statica biblioteca. Si chiama NetModule (estensione del file è di solito .netmodule). Per saperne di più su di esso in questo post sul blog . Attenzione che non è ben supportato da Visual Studio costruire tool chain. Penso metodi di estensione sono un problema pure. ILMerge è lo strumento migliore per ottenere questo fatto.

Altri suggerimenti

Questo non è direttamente correlato al C #, ma a tutta l'ombrello .NET. Certo, è possibile unire le assemblee utilizzando ILMerge , ma ahimè è ancora un progetto di ricerca, ma almeno i suoi permessi licenza d'uso per finalità commerciale. Oltre a questo, il runtime (CLR) non può essere fusero in un unico file eseguibile, la piattaforma di destinazione deve ancora .NET per essere installato.

Modifica:

stavo scrivendo questo prima hai modificato il tuo post con ILMerge. Potrei sbagliarmi, ma non c'è ulteriori benefici dal evitando il collegamento dinamico in stile .NET in fase di esecuzione. Non c'è niente di sbagliato con la messa gli assembly satellite insieme con l'eseguibile. Microsoft sconsiglia di metterli nel GAC.

Utilizzando librerie statiche presenta l'inconveniente di non essere patchable dal provider runtime (MS).

Per esempio, se si utilizza librerie MFC statica e una questione Securify o altro bug si trova nel librerie statiche MFC, MS non può patch (il codice è già in vostro eseguibile). Utilizzando DLL condivise consente una patch facile a livello di sistema operativo senza di te preoccuparsi di questo.

Naturalmente avente librerie condivise ha un piccolo inconveniente:. Una dipendenza è preso e che deve essere installato sul sistema

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top