簡體   English   中英

如何為多個Visual Studio版本打包基於VSIX的擴展?

[英]How to package a VSIX-based extension for multiple Visual Studio versions?

我正在維護一個公司內部Visual Studio擴展,它被打包並部署為VSIX容器。 此擴展目前針對VS 2010.它使用幾個VS API DLL並引用它們的VS 2010版本。

我目前正在遷移此擴展程序以與VS 2012/2013兼容。 我已經發現可以手動編輯舊的VSIX清單以允許擴展另外安裝到VS 2012/2013 - 這非常有效。

但是我目前使用的一些VS 2010 API與VS 2012 ++不兼容,我需要更新它們 - 具有放棄向后兼容性的效果。

我的問題是:我應該如何構建我的解決方案和VSIX以便它與VS 2010,2012和2013兼容。是否可以使用一個針對VS 2010的DLL和一個針對VS 2012/2013的DLL並選擇一個使用的在延長加載時間?

旁注:我正在使用MEF來構建我的內部功能單元。 這會讓它變得更容易嗎?

你可以:

  1. 將兩個特定於版本的程序集公開的功能分離到一個ad-hoc接口(如果您願意,可以將其自身放入主機程序集中),就像您可能對每個其他MEF插件一樣; 我們稱之為IDoWork ;
  2. 在兩種具體類型中實現上述接口,由兩個不同的組件暴露,每個VS版本支持一個,例如DoWorkVs2010DoWorkVs2012 ;

    • AssemblyForVS2010.dll - > DoWorkVs2010:IDoWork
    • AssemblyForVS2012.dll - > DoWorkVs2012:IDoWork

3.( 可選[導出]這兩種類型,通過MEF提供; 例如:

    [Export(typeof(IDoWork))]
    class DoWorkVs2010 : IDoWork
    {
        // ...
    }

4.將工廠添加到主機組件(直接加載VSX的工廠),然后根據DTE版本構建您要查找的具體類型:

    static class DoWorkFactory
    {
        internal static IDoWork Build()
        {
            // Load the version-specific assembly

            // - Via reflection (see http://stackoverflow.com/a/465509/904178)
            // - Or via MEF

            return ...;
        }
    }

使用Jared Par的這些VSIX模板 它們的開發目的是使您的VSIX項目可以在多個VS版本中安裝和打開。 看起來他們可能需要為VS2015進行梳洗,但它們絕對是大多數VSIX開發的起點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM