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>
Grazie mille, è esattamente quello che mi serviva! – Shrike
Sembra che non funzioni più - per VS 2017 e oltre – Shrike