È possibile creare un progetto Visual Studio con Tipo di output di & # 8220; none & # 8221 ;?
-
07-07-2019 - |
Domanda
Sto usando Visual Studio 2008 e vorrei creare una sorta di progetto contenitore che contenga un numero di DLL che devono essere installate con una soluzione. Voglio che facciano parte di un progetto separato in modo che possano essere facilmente collegati a una soluzione come gruppo.
Ho creato un TEST di chiamata di progetto vuoto, vi ho aggiunto le mie DLL con un'azione di compilazione di "Contenuto" e le ho impostate su "Copia sempre". Tutto funziona esattamente come voglio. Il problema è che se imposto il tipo di output del progetto TEST su " Applicazione console " o " Applicazione Windows " che non costruirà perché non c'è un punto di ingresso. Se imposto il Tipo di output su " Class Library " ;, si crea ma finisco con un file TEST.DLL extra che non voglio davvero.
Esiste comunque una sorta di impostazione del Tipo di output su " none " ;? Voglio che vengano eseguite le azioni di compilazione (quindi la mia DLL viene copiata) ma non desidero creare l'assembly di classe fittizio. Qualche idea?
Grazie!
Soluzione
Presupposti per la seguente guida dettagliata:
Supponiamo che tu abbia una soluzione con due progetti:
-
Main
: il tuo progetto principale (di avvio). -
BundledDLLs
: un progetto di libreria che contiene i.dll
che dovrebbero finire nella directory di output del progetto principale.
Guida dettagliata:
Il modo più semplice per raggiungere il tuo obiettivo in Visual Studio è probabilmente il seguente:
Aggiungi tutti i
.dll
suBundledDLLs
e imposta la loro Copia nella directory di output su Copia se più recente .Questo viene fatto nelle finestre Esplora progetti e Proprietà .
Configura la directory di output di
BundledDLLs
in modo che sia identica alla directory di output diMain
.Questo può essere fatto nella scheda Build della pagina Proprietà del progetto di
BundledDLL
. Inserisci qualcosa di simile al seguente nella casella di testo Percorso di output :..\Main\bin\Debug
Imposta
BundledDLLs
come dipendenza diMain
.Non aggiungere
BundledDLLs
come riferimento del progetto aMain
, come di consueto; utilizzare invece la finestra di dialogo Dipendenze del progetto per. Questo dirà allo strumento di compilazione che ogni volta cheMain
viene creato,BundledDLLs
deve essere creato per primo.Fallo facendo clic con il tasto destro sul nodo del progetto
Main
per aprire il menu contestuale; seleziona Dipendenze dal progetto ... da lì. Nella finestra di dialogo ora aperta, seleziona primaMain
dall'elenco a discesa; quindi selezionaBundledDLLs
nell'elenco di progetti in basso.BundledDLLs
è ora registrato come dipendenza diMain
.P.S .: Uno svantaggio di non con un riferimento esplicito all'assemblaggio in
Main
è che alcuni strumenti potrebbero non riconoscere la dipendenza. Ad esempio, la distribuzione ClickOnce potrebbe non funzionare correttamente.Aggiungi un evento post-compilazione a
BundledDLLs
che elimina ilBundledDLLs.dll
superfluo <>Come hai detto, non vuoi e non hai bisogno dell'output fittizio generato quando si costruisce
BundledDLLs
. Quindi aggiungi un evento post-build che elimina semplicemente questo.dll
una volta creato.Apri la scheda Eventi di costruzione nella pagina Proprietà del progetto di
BundledDLLs
e inserisci qualcosa di simile al seguente nella casella di testo post-build:DEL "$(TargetDir)\$(TargetName).*"
(Nel caso te lo chiedessi: il motivo per cui non hai aggiunto questo progetto come riferimento del progetto a
Main
in precedenza è perché se lo avessi fatto,Main
sarebbe cercareBundledDLLs.dll
, che non sarebbe in grado di trovare poiché in realtà non si desidera generare un file del genere.)P.S .: Uno svantaggio di aggiungere un tale passaggio post-build è che potrebbe interferire con build incrementali. Se il tuo progetto continua a essere ricompilato da zero dopo questo, potresti essere meglio rimuovere il passaggio post-build e vivere con il
BundledDLLs.dll
extra nella directory di output della tua soluzione.
Altri suggerimenti
Un'altra opzione è quella di utilizzare un progetto makefile, che non richiede di creare / collegare nulla.
Nelle proprietà del progetto (fare clic con il pulsante destro del mouse su Esplora soluzioni e fare clic su " Proprietà "), sotto " Proprietà di configurazione " e quindi in " Generale " ;, scegli " Makefile " dal tipo di configurazione " menu a discesa. L'output di compilazione includerà l'avviso " La proprietà 'NMakeBuildCommandLine' non esiste ... Salto " ma la compilazione avrà successo senza creare dll / exe / etc.
Mentre altre risposte qui possono rispondere meglio alle tue esigenze specifiche, specificare un makefile risponde più direttamente al titolo della domanda "Possibile creare un progetto di Visual Studio con Tipo di output di nessuno?" Spero che questo sia utile per le persone che google qualcosa in tal senso e atterrano qui.
Il merito va a Xeek nel canale irwin #winapi freenode per la condivisione di questo suggerimento.
Invece di inserirli in un progetto, è possibile inserire i file in un Cartella soluzione . Uno dei tuoi progetti può avere un'azione di compilazione che esegue la copia, ma poiché non si troveranno in un progetto, non proveranno a " build " ;.