5

Tôi có một giải pháp với phần mở rộng Visual Studio của tôi. Phần mở rộng này sẽ hoạt động trong bất kỳ phiên bản VS nào kể từ VS2010. Đó là bởi vì tôi sử dụng VS 2010 SDK. Tôi đã thực hiện hacks để ràng buộc các dự án của tôi với các assembly và mục tiêu SDK VS2010 để làm việc mà không cần cài đặt SDK - nhờ vào this detailed guide by Aaron Marten. Tôi có thể xây dựng thành công phần mở rộng của tiện ích mở rộng và cài đặt nó trong bất kỳ VS. Tốt đẹp.Làm thế nào để gỡ lỗi phần mở rộng VSIX trong VS đó là phiên bản khác sau đó phiên bản của VS SDK đang được sử dụng

Nhưng tôi cũng muốn gỡ lỗi tiện ích mở rộng của mình bằng F5. Tôi muốn làm điều đó không phải trong VS2010 nhưng trong một số VS-VS 2015 khác trong trường hợp của tôi. Tôi thậm chí đã cài đặt VS 2015 SDK. Nhưng nó không hoạt động rõ ràng. Khi các mục tiêu từ VS2010 SDK được yêu cầu triển khai phần mở rộng được xây dựng vào ví dụ thử nghiệm VS2010.

Vì vậy, câu hỏi là:
làm thế nào để thiết lập dự án để gỡ lỗi một phần mở rộng vsix trong VS2015 với F5 nếu phần mở rộng chính nó sử dụng VS2010 SDK?

Có lẽ tôi cần phải sử dụng một số mục tiêu/nhiệm vụ từ SDK VS2015 nhưng cái nào và cách nào?

Trả lời

3

Từng mô tả bước làm thế nào để đạt được điều này là có sẵn trong lịch sử Cam ở đây: https://github.com/jaredpar/RoundTripVSIX/commits/master (tôi đã sử dụng nó thành công trong công tác khuyến VS của tôi "SQL Server Compact Toolbox")

+0

Cảm ơn rất nhiều, đó chính xác là những gì tôi cần! – Shrike

+0

Có vẻ như nó không hoạt động nữa - cho VS 2017 và xa hơn nữa – Shrike

3

tôi đặt giải pháp ở đây cho sự đơn giản . Nó được lấy từ https://github.com/jaredpar/RoundTripVSIX/commits/master - xem câu trả lời của @ErikEj với một bổ sung nhỏ.

Thông thường, chúng tôi đang nhập Microsoft.VsSDK.targets tệp vào csproj gói dự án VS của chúng tôi. Như dự án của tôi không phụ thuộc vào SDK VS cài đặt trên toàn cầu tôi nhập khẩu từ một thư mục địa phương với VS2010 SDK:

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

Bí quyết là để làm cho nhập khẩu này động:

  • khi chúng tôi trong VS nên nhập khẩu các mục tiêu VSSDK của hiện tại VS phiên bản
  • khi chúng tôi đang xây dựng dự án nên nhập khẩu các mục tiêu VSSDK của phiên bản VS được hỗ trợ tối thiểu (như trước đây).

Điều này đạt được thông qua biến bổ sung ("VsSdkTargets" - tên có thể có):

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

Và đây là định nghĩa của VsSdkTargets (nên trước khi nhập khẩu):

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

Điều này làm cho hoạt động nhập của chúng tôi dựa trên tính khả dụng của biến số VisualStudioVersion chỉ khả dụng bên trong VSBuildingInsideVisualStudio. BuildingInsideVisualStudio sẽ là true khi xây dựng bên trong VS.

Nếu bạn cần phải mở giải pháp trong khác nhau VS các phiên bản sau đó chúng ta cũng cần để thêm tùy chỉnh của MinimumVisualStudioVersion biến

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

Để gỡ lỗi để bắt đầu một cách đơn giản (F5) trong tất cả các phiên bản hỗ trợ của Visual Studio và độc lập với cài đặt người dùng cho dự án, bạn nên thêm các hướng dẫn sau vào số PropertyGroup:

<PropertyGroup> 
    ... 
    <StartAction>Program</StartAction> 
    <StartProgram>$(DevEnvDir)\devenv.exe</StartProgram> 
    <StartArguments>/rootsuffix Exp</StartArguments> 
</PropertyGroup> 
Các vấn đề liên quan