Маленькая шпаргалка на тему совместимости версий .NET плагинов, AutoCAD, .NET Framework и MS Visual Studio. Вообще, Visual Studio можно использовать любую: главное, чтобы она поддерживала возможность писать код под нужную нам версию .NET Framework. Разные версии AutoCAD могут использовать разные версии .NET Framework и плагины, использующие эти платформы. Кроме того, некоторые управляемые плагины можно использовать в разных версиях AutoCAD без необходимости их перекомпиляции.

[R17.2] AutoCAD 2009: .NET 3.0, 3.5; Visual Studio 2005 и более новые.
[R18.0] AutoCAD 2010: .NET 3.5; Visual Studio 2005 и более новые.
[R18.1] AutoCAD 2011: .NET 3.5, 4.0, 4.5, 4.5.1 (см. примечание 1); Visual Studio 2005 и более новые.
[R18.2] AutoCAD 2012: .NET 4.0, 4.5, 4.5.1 (см. примечание 2); Visual Studio 2010 и более новые.
[R19.0] AutoCAD 2013: .NET 4.0, 4.5, 4.5.1 (см. примечание 2); Visual Studio 2010 и более новые.
[R19.1] AutoCAD 2014: .NET 4.0, 4.5, 4.5.1 (см. примечание 2); Visual Studio 2010 и более новые.
[R20.0] AutoCAD 2015: .NET 4.5, 4.5.1 (см. примечание 2); Visual Studio 2012 и более новые.
Особым образом хочется выделить AutoCAD 2010 и 2011. Официально компанией Autodesk заявлено, что эти версии требуют для своей работы Microsoft Visual Studio 2008 with Service Pack 1 и Microsoft .NET Framework 3.5 with Service Pack 1. Однако практика показывает, что если у программиста под рукой окажется только Visual Studio 2005 и AutoCAD 2011, то написать плагин он сможет. Но в виду того, что в Visual Studio 2005 нет возможности указать целевую версию платформы .NET, этот плагин будет компилироваться с использованием .NET 2.0. Соответственно, при написании плагина AutoCAD, программист будет ограничен рамками платформы .NET 2.0. Например, он не сможет использовать технологии LINQ и WPF.

Для примера, в Visual Studio 2005 автор написал и скомпилировал плагин для AutoCAD 2011, который успешно запустился в обозначенной версии AutoCAD:

   1:  using System;
   2:  using cad = Autodesk.AutoCAD.ApplicationServices
   3:  .Application;
   4:  using Rt = Autodesk.AutoCAD.Runtime;
   5:   
   6:  namespace acad_2011{
   7:      public class Class1 {
   8:          [Rt.CommandMethod("test", Rt.CommandFlags.Modal)]
   9:          public void Test(){
  10:              cad.DocumentManager.MdiActiveDocument
  11:                  .Editor.WriteMessage(
  12:                  "MS VS 2005: Hello, AutoCAD 2011!n");
  13:          }
  14:      }
  15:  }

В подкаталоге inс установленного ObjectARX SDK, управляемые сборки появились лишь начиная с AutoCAD 2011. .NET плагины, использующие сборки AutoCAD только из этого каталога, можно без опасений компилировать как AnyCPU. В иных случаях нужно быть осторожным. Начиная с AutoCAD 2013 в обозначенном подкаталоге появился файл AcCoreMgd.dll. В новый файл было вынесено часть функционала из файла AcDbMgd.dll и часть из файла AcMgd.dll.

Небольшая переведённая мною на русский язык цитата, автором которой является Scott McFarlane [CP2654]:
В последние несколько лет компания Autodesk работала над разделением бизнес логики AutoCAD от логики взаимодействия с GUI. Такое разделение позволяет иметь единую кодовую базу, не зависящую от конкретной операционной системы (Windows, MacOS). Это разделение было названо «большим разделением» (The Big Split). Указанная работа была завершена в AutoCAD 2013 и теперь мы имеем трёх уровневую архитектуру, как показано ниже:


Важно понимать, что каждый уровень зависит от ниже расположенных уровней и не зависит от уровней расположенных выше. Два нижних уровня представляют собой механизм ядра AutoCAD (AutoCAD Core Engine). В виду высокой скорости своего запуска, помимо использования в пакетной обработке чертежей, приложение AcCoreConsole так же хорошо подходит и для проведения автоматического тестирования кода.

Теперь программный код рекомендуется писать разделяя его зависящую от AutoCAD API часть от той части, которая не зависит от AutoCAD API. Затем, часть кода, зависящую от AutiCAD API в свою очередь рекомендуется делить на две части: на ту, которая зависит лишь от базового уровня (библиотеки acdbmgd.dll и accoremgd.dll) и на ту, которая зависит от UI (acmgd.dll).


Начиная с AutoCAD 2013 SP1 был внедрён механизм безопасности загрузки в AutoCAD сторонних программных библиотек (подробнее здесь). Начиная с AutoCAD 2014, на вкладке Files диалогового окна Options присутствует ветка Trusted Locations.
Если вы написали управляемый плагин под одну версию AutoCAD, то сможете использовать его и для другой версии AutoCAD, в случае выполнения следующих условий:
1. Обе версии AutoCAD могут использовать ту версию .NET Framework, которая применялась при написании плагина (см. примечание 1).
2. К вашему плагину AutoCAD подключены библиотеки, присутствующие в обоих версиях AutoCAD.
3. Ваш плагин использует только ту часть API, которая присутствует в обоих рассматриваемых версиях AutoCAD.
4. Если управляемый плагин скомпилирован с опцией x86 или x64 (например, по причине использования Interop в вашем коде), то и целевые версии AutoCAD должны иметь ту же самую разрядность, что и плагин.
ВНИМАНИЕ!
Даже если выполнены все обозначенные выше условия, всё равно следует обязательно произвести тестирование (желательно с использованием Gallio) вашего плагина на полную его совместимость с иными, интересующими вас версиями AutoCAD (т.е. загрузить плагин и проверить его работоспособность).
Примечание 1:
В AutoCAD 2011 конфигурационный файл acad.exe.config содержит закомментированные XML элементы, указывающие целевую версию .NET Framework:
   1:  <!--<startup useLegacyV2RuntimeActivationPolicy="true">
   2:  <supportedRuntime version="v4.0"/>
   3:  </startup>-->
В этом состоянии AutoCAD 2011 использует .NET 3.5, но если указанные выше XML элементы раскомментировать, то AutoCAD 2011 будет использовать наиболее новую версию .NET из тех которые приложение сможет найти и использовать. Применительно к AutoCAD 2011 это будут версии .NET 4.0, 4.5 и 4.5.1.
Примечание 2:
В отличие от AutoCAD 2011, в конфигурационных файлах AutoCAD 2012-2015 обозначенные в «Примечании 1» XML элементы по умолчанию раскомментированы.

Примечание 3:
Если вместо acad.exe используется accoreconsole.exe, то его конфигурационный файл, соответственно, следует искать под именем accoreconsole.exe.config.