2016-03-14 3 views
5

Dopo aver letto tutto ciò che ho trovato sul nuovo elemento contentFiles di NuGet 3.3+, non riesco ancora a farlo funzionare nel mio pacchetto. Ho un pacchetto destinato sia a net46 sia a uap10.0 e la selezione delle DLL corrette per il tipo di progetto e la piattaforma funzionano come previsto. Ma vorrei anche aggiungere due file al progetto sull'installazione del pacchetto, un file CSV per tutti i progetti e piattaforme e un file di codice per C# o VB.Net (con buildAction="Compile"). Ecco la versione ridotta del mio ultimo file .nuspec:NuGet 3.3+: contentFiles non aggiunto al progetto

<?xml version="1.0" encoding="utf-8" ?> 
<package xmlns="http://schemas.microsoft.com/packaging/2010/07/nuspec.xsd"> 
    <metadata minClientVersion="3.3.0"> 
    ... 
    <contentFiles> 
     <files include="any\any\ErrorCodes.csv" buildAction="None" copyToOutput="false" /> 
     <files include="cs\any\Errors.cs.pp" buildAction="Compile" /> 
     <files include="vb\any\Errors.vb" buildAction="Compile" /> 
    </contentFiles> 
    </metadata> 
    <files> 
    <file src="contentFiles\any\any\ErrorCodes.csv" target="contentFiles\any\any\" /> 
    <file src="contentFiles\cs\any\Errors.cs.pp" target="contentFiles\cs\any\" /> 
    <file src="contentFiles\vb\any\Errors.vb" target="contentFiles\vb\any\" /> 
    ... 
    </files> 
</package> 

Il pacchetto è stato creato senza errori, e lo fa contenere i tre file nella cartella contentFiles con la struttura di directory specificata.

Ma quando installo il pacchetto, l'ho provato con un'app universale (C# e VB) e un'app console .NET 4.6 che ho modificato per utilizzare un file project.json: viene aggiunto il riferimento alla DLL, ma i file di contenuto non vengono aggiunti alla struttura del progetto né copiati nella directory del progetto.

Sono grato per qualsiasi input!

risposta

6

OK, ho trovato che il contentFiles funziona effettivamente, ma non nel modo in cui me l'aspettavo. Una breve descrizione per tutti coloro che non riusciva a trovare il suo/suoi contentFiles:

  • Nuget 3.3+ contentFiles sono non aggiunto alla struttura del progetto. Non li vedrai in Visual Studio.
  • Invece, i file vengono estratti in una cartella nella cartella obj del progetto e referenziati (se il file è codice). Vedrai anche le classi oi metodi nei file di codice contentFiles disponibili in IntelliSense. Nel mio caso, la classe Errors era accessibile, sebbene non fosse visibile da nessuna parte nel progetto.
  • Il percorso dei file estratti ha il seguente schema: \ obj \ < Debug o Release > \ NuGet \ < alcuni GUID > \ < NuGet nome del pacchetto > \ <versione> \

io non sono certo se mi piace questo nuovo meccanismo. Codice proveniente da una fonte invisibile che non riesco a vedere in Visual Studio (una libreria distribuita tramite NuGet è visibile in Riferimenti, qualsiasi codice che porta tramite contentFiles non lo è) può a volte creare problemi. Ho effettivamente scoperto che il meccanismo contentFiles funziona quando ho riscontrato un errore di ambiguità in Visual Studio perché gli errori "invisibili" dal pacchetto NuGet sono entrati in collisione con gli errori "visibili" che avevo aggiunto manualmente al progetto.

+0

non mi piace questo nuovo meccanismo - aggiunge molto più stress al processo - difficile vedere cosa sta succedendo – tofutim

+0

sono confuso, sto cercando di seguire il tuo file nuspec, e mentre io vedo contentFiles nella directory dei pacchetti, nulla va alla cartella obj. Mi sto perdendo qualcosa? – tofutim

+0

Hai provato a compilare il progetto? Penso che i file vengano copiati nella cartella obj durante la compilazione. –