5

Ho una soluzione con la mia estensione di Visual Studio. Questa estensione dovrebbe funzionare in qualsiasi versione VS da VS2010. Questo perché utilizzo VS 2010 SDK. Ho realizzato hack per legare i miei progetti agli assembly VSK010 SDK e agli obiettivi per funzionare senza l'installazione dell'SDK, grazie a this detailed guide by Aaron Marten. Posso creare con successo vsix della mia estensione e installarlo in qualsiasi VS. Bello.Come eseguire il debug dell'estensione VSIX in VS, che è di un'altra versione, quindi viene utilizzata la versione di VS SDK

Ma voglio anche eseguire il debug della mia estensione con F5. Voglio farlo non in VS2010 ma in qualche altro VS - VS 2015 nel mio caso. Ho persino installato VSK 2015 SDK. Ma non funziona ovviamente. Poiché gli obiettivi di VS2010 SDK supponevano di distribuire l'estensione incorporata nell'istanza sperimentale VS2010.

Quindi la domanda è:
come progetto di installazione per eseguire il debug un'estensione VSIX in VS2015 con F5 se l'interno stesso usa VS2010 SDK?

Probabilmente ho bisogno di utilizzare alcuni obiettivi/attività da VS2015 SDK ma quali e come?

risposta

3

descrizione passo passo di come raggiungere questo obiettivo è disponibile nella storia Commit qui: https://github.com/jaredpar/RoundTripVSIX/commits/master (ho usato con successo nella mia estensione VS "SQL Server Compact Toolbox")

+0

Grazie mille, è esattamente quello che mi serviva! – Shrike

+0

Sembra che non funzioni più - per VS 2017 e oltre – Shrike

3

ho messo la soluzione qui per la semplicità . È preso da https://github.com/jaredpar/RoundTripVSIX/commits/master - vedi la risposta di @ErikEj con una piccola aggiunta.

Di solito stiamo importando il file Microsoft.VsSDK.targets nel nostro progetto csproj del pacchetto VS. Come i miei progetti non dipendono SDK VS installati a livello globale Sto importando da una cartella locale con VS2010 SDK:

<Import Project="..\..\SDK\v10.0\MSBuild\VSSDK\Microsoft.VsSDK.targets" /> 

Il trucco è quello di rendere questa importazione dinamica:

  • quando siamo in VS ci dovrebbe essere l'importazione di obiettivi VSSDK dello VS
  • corrente durante la costruzione del progetto ci dovrebbe essere l'importazione di obiettivi VSSDK di versione VS supportata minima (come prima).

Questo risultato è ottenuto attraverso variabile aggiuntiva ("VsSdkTargets" - nome può essere qualsiasi):

<Import Condition="Exists($(VsSdkTargets))" Project="$(VsSdkTargets)" /> 

Ed ecco definizione di VsSdkTargets (dovrebbe essere prima che l'importazione):

<PropertyGroup> 
    <VsSdkTargets Condition=" '$(VisualStudioVersion)' == '' or '$(BuildingInsideVisualStudio)' != 'false' ">..\..\SDK\v10.0\MSBuild\VSSDK\Microsoft.VsSDK.targets</VsSdkTargets> 
    <VsSdkTargets Condition=" '$(BuildingInsideVisualStudio)' == 'true' ">$(MSBuildExtensionsPath)\Microsoft\VisualStudio\v$(VisualStudioVersion)\VSSDK\Microsoft.VsSDK.targets</VsSdkTargets> 

</PropertyGroup> 

Ciò rende la nostra dinamica di importazione basata sulla disponibilità della variabile VisualStudioVersion che è disponibile solo all'interno di VS e BuildingInsideVisualStudio. BuildingInsideVisualStudio sarà true quando si costruisce all'interno di VS.

Se è necessario aprire la soluzione in diversi VS versioni allora dobbiamo anche aggiungere la personalizzazione di MinimumVisualStudioVersion variabile

<PropertyGroup> 
    <!-- This is added to prevent forced migrations in Visual Studio 2012 and newer --> 
    <MinimumVisualStudioVersion Condition="'$(VisualStudioVersion)' != ''">$(VisualStudioVersion)</MinimumVisualStudioVersion> 
</PropertyGroup> 

Affinché il debug per avviare in modo diretto (F5) in tutte le versioni supportate di Visual Studio e indipendentemente da impostazioni utente per il progetto, è necessario aggiungere le seguenti istruzioni nella prima PropertyGroup:

<PropertyGroup> 
    ... 
    <StartAction>Program</StartAction> 
    <StartProgram>$(DevEnvDir)\devenv.exe</StartProgram> 
    <StartArguments>/rootsuffix Exp</StartArguments> 
</PropertyGroup>