2016-06-21 38 views
37

Quando si tenta di aggiungere riferimenti a un VSIX, normalmente lo si estrae dai riferimenti in .csproj. Tuttavia, se i riferimenti non si trovano in .csproj, poiché ora si trovano in un file project.json, non vengono richiamati in vsix. La soluzione può quindi essere compilata, ma in seguito l'estensione non riesce con errori "file not found" quando installati in Visual Studio (poiché gli assembly non sono stati copiati sul VSIX).Aggiungere i riferimenti del pacchetto project.json a un VSIX

ho provato con la sezione del manifesto in questo modo:

<Asset Type="Microsoft.VisualStudio.Assembly" d:Source="Project" d:ProjectName="*PROJECTNAME*" Path="|*ASSEMBLYNAME*|" AssemblyName="|*ASSEMBLYNAME*;AssemblyName|" /> 

Ma non funziona, in quanto non riconosce i riferimenti del pacchetto.

Dopo alcune ricerche ho visto un problema simile con un PCL, tuttavia, senza una risposta e non lo stesso tipo di problema: MEF With Portable Class library using Microsoft Composition MEF2 throws file not found exception

Nella stessa nota, questa sembra una soluzione accettabile: VSIX with Project Templates and NuGet Packages tuttavia, come Per quanto ho capito, implica l'utilizzo del pacchetto durante l'installazione. Inoltre, non funziona per il nostro caso in quanto è necessario specificare la versione del pacchetto e stiamo usando project.json in modo che possiamo usare le versioni floating (es .: 2.0. *)

C'è un modo per fare riferimento a questo project.json riferimenti che ci mancano? Forse una soluzione? Le soluzioni che ho trovato sembrano aver bisogno di "incollare" DLL da qualche parte, che per le versioni fluttuanti non è conveniente.

Grazie in anticipo per qualsiasi aiuto o input.

Modifica/Aggiornamento: Poiché VSIX esegue automaticamente il push di qualsiasi assembly a cui si fa riferimento in CSPROJ (e non del progetto stesso), il tentativo di ottenere le DLL a livello di progetto sembra improbabile. Dopo molti tentativi, penso che una soluzione valida sarebbe ottenere gli assembly dalla cartella di output. Tuttavia, per quanto ne so, VSIX non ha un modo per farlo, o no?

+0

E 'strano questo sta ottenendo così tanti upvotes. La soluzione alternativa non dovrebbe essere: _non utilizzare project.json nel primo posto_? project.json verrà rilasciato nei prossimi mesi e Microsoft inizierà a lavorare sul ripristino della funzionalità di project.json nel buon vecchio csproj. Perché stai usando project.json? Hai bisogno di dotnet core su un'estensione di Visual Studio? Come? Perché? Così tante domande! – Joao

+0

[Avevo questo indietro nel mio commento precedente, che ho eliminato] Nel nostro caso, stavamo cercando di affrontare il fatto che VS 2015 update 3 utilizza una versione precedente di System.Collections.Immutable di Roslyn, quindi ci siamo imbattuti in questo articolo che spiega come eseguire il downgrade della versione di tale assembly alla versione 1.1.37 per creare un'estensione che utilizzi Roslyn.A quel punto, abbiamo iniziato a esaminare il problema che le DLL non sono state distribuite con il pacchetto VSIX e abbiamo trovato questa domanda SO con lo stesso scenario. – fussmonkey

+2

FWIW Ho sentito che project.json stava tornando a project.xxproj - vedi questo post sul blog https://blogs.msdn.microsoft.com/dotnet/2016/05/23/changes-to-project-json/ –

risposta

1

Non sono sicuro di aver compreso correttamente la domanda, ma se si sta tentando di installare un modello di progetto tramite VSIX e si desidera che il modello di progetto includa tutti i suoi pacchetti di nuget quando lo si utilizza, si potrebbe fare qualcosa come questo.

Modificare il file xproj Modello di progetto e di aggiungere le seguenti righe:

<ItemGroup> 
    <None Include="project.json"/> 
    <None Include="project.lock.json"/> 
</ItemGroup> 

Modificare il file vstemplate Modello di progetto e di aggiungere le seguenti righe nel nodo di progetto:

<ProjectItem ReplaceParameters="true" TargetFileName="project.json">project.json</ProjectItem> 
<ProjectItem ReplaceParameters="true" TargetFileName="project.lock.json">project.lock.json</ProjectItem> 

che dovrebbe essere tutto devi farlo Ora quando si installa il modello di progetto, quindi si crea un nuovo progetto usando quel modello, dovrebbe includere tutti i pacchetti di nuget presenti nel file project.json.