È possibile creare un progetto Visual Studio con Tipo di output di & # 8220; none & # 8221 ;?

StackOverflow https://stackoverflow.com/questions/1434629

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!

È stato utile?

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:

  1. Aggiungi tutti i .dll su BundledDLLs e imposta la loro Copia nella directory di output su Copia se più recente .

    Questo viene fatto nelle finestre Esplora progetti e Proprietà .

  2. Configura la directory di output di BundledDLLs in modo che sia identica alla directory di output di Main .

    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
    
  3. Imposta BundledDLLs come dipendenza di Main.

    Non aggiungere BundledDLLs come riferimento del progetto a Main , come di consueto; utilizzare invece la finestra di dialogo Dipendenze del progetto per. Questo dirà allo strumento di compilazione che ogni volta che Main 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 prima Main dall'elenco a discesa; quindi seleziona BundledDLLs nell'elenco di progetti in basso. BundledDLLs è ora registrato come dipendenza di Main .

      

    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.

  4. Aggiungi un evento post-compilazione a BundledDLLs che elimina il BundledDLLs.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 cercare BundledDLLs.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 " ;.

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