Typecast не работает, когда расширение Visual Studio использует ссылку на более старую сборку

Я пишу расширение Visual Studio, которое ссылается на сборку Microsoft.VisualStudio.VCProjectEngine.

Теперь я пытаюсь преобразовать EnvDTE.Project в Microsoft.VisualStudio.VCProjectEngine.VCProject следующим образом:

VCProject vcProject = project.Object as VCProject;

Это приведение отлично работает при сборке и запуске моего расширения в Visual Studio 2015 при использовании версии 14.0 сборки VCProjectEngine. Однако приведение не работает, когда я меняю версию на 12.0, чтобы мое расширение можно было установить и в VS2013. Здесь должно быть что-то, чего мне не хватает.

Как я могу сослаться на сборку VCProjectEngine, чтобы мое приведение типов работало в VS2013 и VS2015?


person Malte Langkabel    schedule 31.05.2017    source источник
comment
Используете ли вы ссылку Microsoft.VisualStudio.VCProjectEngine.dll, поставляемую с VS 2013, в разделе Common7\IDE\PublicAssemblies? То, что я знаю, что эта сборка действительно имеет разные версии для разных версий VS, и другие участники сообщества также получили проблему совместимости раньше: social.msdn.microsoft.com/Forums/vstudio/en-US/, это означает, что определенный тип объекта был изменен в старшей версии. Если возможно, я предлагаю вам создать новый в VS2013.   -  person Jack Zhai-MSFT    schedule 01.06.2017
comment
@JackZhai-MSFT: Спасибо за этот указатель. Да, я пытался использовать сборку, поставляемую с VS2013. В этом случае при запуске расширения в VS2015 происходит сбой приведения типов, но когда я устанавливаю то же расширение в VS2013 и запускаю его там, все работает нормально. Что вы имеете в виду под я предлагаю вам создать новый в VS2013?   -  person Malte Langkabel    schedule 01.06.2017
comment
Просто игнорируйте это, на самом деле я имею в виду, что если расширение имеет проблему совместимости в разных версиях VS, лучше создать отдельный проект. Просто чтобы прояснить эту проблему, эта проблема была решена в VS2013 после того, как вы теперь используете правильную сборку? я прав? Если это так, я опубликую это решение как ответ :)   -  person Jack Zhai-MSFT    schedule 02.06.2017
comment
Да, ты прав. Создание различных расширений для каждой версии VS, которые ссылаются на соответствующие сборочные работы. Если вы публикуете свой ответ, также включите эту ссылку: social.msdn.microsoft.com/Forums/en-US/ Подробно объясняются стратегии решения этих проблем.   -  person Malte Langkabel    schedule 02.06.2017
comment
Отредактируйте ответ, хорошего дня :)   -  person Jack Zhai-MSFT    schedule 02.06.2017


Ответы (1)


Эта сборка действительно имеет разные версии для разных версий VS, каждая версия VS должна ссылаться на соответствующую сборку.

Справка:

https://social.msdn.microsoft.com/Forums/en-US/d47bfe90-19bb-4c0c-9f36-74ff60eb490d/vcproject-interface-targeting-multiple-versions?forum=vsx

person Jack Zhai-MSFT    schedule 02.06.2017