5

Ich habe eine Lösung mit meiner Visual Studio-Erweiterung. Diese Erweiterung sollte in jeder VS-Version seit VS2010 funktionieren. Das ist, weil ich VS 2010 SDK verwende. Ich habe Hacks gemacht, um meine Projekte an VS2010 SDK Assemblies und Targets zu binden, um ohne SDK zu arbeiten - dank this detailed guide by Aaron Marten. Ich kann Vsix meiner Erweiterung erfolgreich erstellen und in jedem VS installieren. Nett.Wie VSIX-Extension in VS zu debuggen, die von einer anderen Version als Version von VS SDK verwendet wird

Aber ich möchte auch meine Erweiterung mit F5 debuggen. Ich möchte es nicht in VS2010, sondern in einigen anderen VS - VS 2015 in meinem Fall tun. Ich habe sogar VS 2015 SDK installiert. Aber es funktioniert offensichtlich nicht. Als Ziele von VS2010 SDK soll die Erweiterung implementiert werden, die in die experimentelle VS2010-Instanz eingebaut wird.

Die Frage ist also:
wie Projekt zur Einrichtung einer VSIX Erweiterung in VS2015 mit F5 zu debuggen, wenn die Erweiterung selbst VS2010 SDK verwendet?

Wahrscheinlich muss ich einige Ziele/Aufgaben von VS2015 SDK verwenden, aber welche und wie?

Antwort

3

Schritt für Schritt erklärt, wie dies zu erreichen ist hier in der Commit-Geschichte zur Verfügung: https://github.com/jaredpar/RoundTripVSIX/commits/master (ich es erfolgreich in meiner VS-Erweiterung „SQL Server Compact Toolbox“ verwendet)

+0

vielen Dank, es ist genau das, was ich brauchte: von Visual Studio und Benutzereinstellungen für das Projekt unabhängig von, sollten Sie die folgenden Anweisungen in die erste PropertyGroup anhängen! – Shrike

+0

Es scheint, dass es nicht mehr funktioniert - für VS 2017 und darüber hinaus – Shrike

3

Ich habe hier die Lösung für die Einfachheit . Es stammt aus https://github.com/jaredpar/RoundTripVSIX/commits/master - siehe @ErikEj's Antwort mit einem kleinen Zusatz.

Normalerweise importieren wir Microsoft.VsSDK.targets Datei in unserem VS-Paket-Projekt csproj. Da meine Projekte hängt nicht SDKs auf VS installiert global mit VS2010 SDK aus einem lokalen Ordner importieren Ich bin:

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

Der Trick dieser Import dynamisch zu machen ist:

  • , wenn wir in VS sollte importiert werden VSSDK-Ziele der aktuelle VS-Version
  • Wenn wir das Projekt erstellen, sollte importiert werden VSSDK Ziele der minimal unterstützten VS-Version (wie zuvor).

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

    Und hier ist Definition von VsSdkTargets (vor dem Import sein sollte):: -

Dies wird durch zusätzliche Variable erreicht ("VsSdkTargets" Name kann beliebig sein)

<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> 

Dies macht unser Import-Dynamic basierend auf der Verfügbarkeit der Variablen VisualStudioVersion, die nur in VS und BuildingInsideVisualStudio verfügbar ist. BuildingInsideVisualStudio wird true beim Aufbau von VS sein.

Wenn Sie Lösung VS-Versionen in verschiedenen öffnen, dann müssen wir auch die Anpassung von MinimumVisualStudioVersion variable

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

Damit das Debugging hinzuzufügen in der einfachen Art und Weise (F5) in allen unterstützten Versionen starten

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