我没有试过这个,只是在几分钟内想到这一点,也许它可以工作:
public enum VisualStudioVersion { Unknown, VS2010, VS2012, VS2013, VS14 } public class VsSpecificExportAttribute : ExportAttribute { // the place for this is not right, // but you can figure this out on your own. private static VisualStudioVersion _currentVisualStudioVersion = VisualStudioVersion.VS2013; class DummySentil{} public VsSpecificExportAttribute(Type typeToExport, VisualStudioVersion visualStudioVersion) : base(visualStudioVersion == _currentVisualStudioVersion ? typeToExport : typeof(DummySentil)) { } }
然后你可以用它作为;
[VsSpecificExport(typeof(IWpfTextViewCreationListener), VisualStudioVersion.VS14)] public class MyTextViewCreationListener: IWpfTextViewCreationListener { }
根本的想法是“ VsSpecificExport “属性决定什么时候我们正确的”视觉工作室版本“,如果我们不是,我们将导出”DummySentil“类,它绝对没有任何东西,并且没有被任何人使用。
您可以导出实现该接口的单个类,并根据visual studio版本将该类函数作为实际实现的代理。例如:
[Export(typeof(IMyInterface))] public class ProxyClass : IMyInterface { private IMyInterface impl; public ProxyClass() { if (IsVs2014()) { impl = new Vs2014Impl(); } else { impl = new Vs2013Impl(); } } public void DoSomething() { impl.DoSomething(); } }