Консольное приложение на C# не выполняется, как только используются типы данных в библиотеках Autodesk

Я разрабатываю некоторые надстройки AutoCAD на C#, и я надеялся сначала работать/отлаживать свои классы в консольном приложении, пока не буду готов реализовать функциональность внутри AutoCAD. / библиотеки dot net не могут быть выгружены, и каждый раз при изменении кода необходимо перезапускать / перезагружать acad / Интересно, что я обнаружил, что как только я объявляю переменную, которая использует тип данных autocad, мое консольное приложение отказывается запускаться, и я представлен с экраном «приложение находится в режиме перерыва» в Visual Studio. Например, этот код не работает:

  using System;
  using Autodesk.AutoCAD.Geometry;
  namespace TestConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine("Hi");
            Point2d p;            
            Console.ReadKey();
        }
    }
}

Попытка этой ссылки на библиотеки dll Autodesk C3D 2016. Есть ли у кого-нибудь объяснение того, что здесь происходит, и/или какие-либо обходные пути? спасибо


person tlatev    schedule 26.01.2018    source источник
comment
Можно ли запустить приложение C# без Autodesk? Вы получаете ту же ошибку? Если это так, попробуйте следующее: developercommunity.visualstudio.com/content/problem/13290/ Решение находится примерно на 80% ниже по странице   -  person user7396598    schedule 26.01.2018
comment
Да, как только я закомментирую строку Point2d, приложение запустится, как и ожидалось.   -  person tlatev    schedule 27.01.2018
comment
Попробуйте еще две вещи: создайте экземпляр p. Если у него все еще есть та же ошибка, попробуйте удалить ссылку, очистить и построить, затем добавьте ссылку обратно, очистите и создайте.   -  person user7396598    schedule 27.01.2018
comment
Не повезло! Все еще сталкиваюсь с той же проблемой - нет объектов acad - приложение строится и работает нормально. Как только я добавлю ссылку/экземпляр в библиотеки acad - режим ..break.   -  person tlatev    schedule 27.01.2018
comment
Что делать, если вы используете другой объект из библиотеки Autodesk? Если вы переходите в режим выпуска, он собирается и запускается? Если это так, попробуйте Инструменты -> Параметры -> Отладка. Убедитесь, что флажок «Включено только мой код» не установлен. Если это работает, попробуйте перейти к определению на Point2d и посмотреть, попытается ли он показать вам класс и проверить точки останова.   -  person user7396598    schedule 27.01.2018
comment
Библиотеки AutoCAD тесно связаны с AutoCAD, и большинство из них являются оболочками для классов C++, встроенных в двоичные файлы. Вы в принципе не можете использовать ни один из них вне работающего приложения.   -  person Joel Lucsy    schedule 27.01.2018
comment
да... кажется, я только что нашел ответ здесь: help.autodesk.com/view/ACD/2017/FRA/ К сожалению, такое поведение является преднамеренным.   -  person tlatev    schedule 27.01.2018


Ответы (2)


AutoCAD .NET API предназначен только для работы в процессе. Библиотеки AutoCAD .NET можно использовать только для создания подключаемых модулей (DLL), которые необходимо загрузить в AutoCAD для выполнения.

person gileCAD    schedule 28.01.2018

Для отладки кода надстройки AutoCAD необходимо создать проект библиотеки классов C#, ссылающийся на библиотеки Autodesk CAD 2016 Sdk, и инкапсулировать код в открытый метод, объявленный с помощью CommandMethodAttribute. С помощью этого метода, объявленного с помощью CommandMethod, он будет вашим триггером между командой приглашения AutoCAD и вашим кодом надстройки.

public class AcadCommands
{
    [CommandMethod("TriggerCmd")]
    public void TriggerCommand
    {
        Editor ed = Application.DocumentManager.MdiActiveDocument.Editor;
        ed.WriteMessage("Hi");
        Point2d p;
    }
}

Примечание. В свойствах проекта Visual Studio необходимо настроить запуск отладки, указывающий на acad.exe, а при запуске приложений AutoCAD открывать какой-либо файл DWG и запрашивать " NETLOAD" для включения отлаживаемой скомпилированной библиотеки DLL из проекта VS в контекст приложения AutoCAD. введите здесь описание изображения

person Antonio Leonardo    schedule 02.06.2019