Почему моя DLL все еще используется Revit после выполнения? - PullRequest
0 голосов
/ 20 марта 2019

У меня есть небольшой код C #, который я написал для Revit API:

public List<string> Read_temp_file(string filename, Application app)
{
    string username = Environment.UserName;
    string myPath = "C:\\Users\\" + username + "\\AppData\\Roaming\\pyRevit\\" + app.VersionNumber + "\\";
    List<string> readlines = new List<string>();
    foreach (string file in System.IO.Directory.GetFiles(myPath, "*", SearchOption.AllDirectories))
    {
        if (file.Substring(file.Length - filename.Length,file.Length) == filename)
        {
            readlines = File.ReadLines(myPath + file).ToList();
        }
    }
    return readlines;
}

Я создаю его как DLL, а затем вызываю из плагина в Revit, нет проблем. Но затем, если я возвращаюсь к своему коду и хочу пересобрать, у меня появляется сообщение об ошибке, в котором говорится, что DLL используется другим процессом и блокируется Revit. Почему?

Есть ли какая-то особая вещь, которую я должен сделать для Revit, чтобы "выпустить" ее после использования? Или это нормальное поведение?

Большое спасибо!

Ответы [ 2 ]

1 голос
/ 25 марта 2019

После комментария, который я сделал, перезапускаете ли вы Revit.Я написал в своем блоге статью, в которой объясняется, как вы можете использовать Revit Add-In Manager для достижения желаемого результата:

http://archi -lab.net / debugging-revit-add-ins /

Разница между этим и стандартным методом отладки заключается в том, что Revit загружает DLL с помощью метода LoadFrom(), блокируя ее до тех пор, пока включен процесс Revit.exe.в то время как диспетчер надстроек использует метод Load(), который считывает только byte[] библиотеки DLL, что означает ее доступность, и вы можете пересобрать свое решение в VS и перезагрузить его в Revit, не закрывая его.У него есть недостатки, очевидно, поэтому, пожалуйста, прочитайте пост.

1 голос
/ 25 марта 2019

Revit использует все dll, даже когда команда не выполняется, необходимо визуализировать меню или сделать команду доступной для приложения.

Если вы хотите отладить свой код, вы можете настроить отладку проекта для цели revit.exe, а затем приостановить выполнение, чтобы изменить код, пока у вас есть открытый revit (я использую Visual Studio 2017).

РЕДАКТИРОВАТЬ: (настроить VS 2017 для отладки в Revit)

  1. Создайте проект библиотеки классов (.NET Framework) в своем решении.
  2. Перейдите в Свойства проекта -> Отладка, выберите «Запустить внешнюю программу» и найдите путь к revit.exe. (C: \ Program Files \ Autodesk \ Revit 2019 \ Revit.exe)
  3. Для отладки вашего текущего проекта вы можете настроить сборку так, чтобы она копировала вашу dll прямо в папку, которую использует revit. Перейдите в «События сборки» -> «Командная строка события после сборки» и напишите:

copy "$ (ProjectDir) *. Addin" "$ (AppData) \ Autodesk \ REVIT \ Addins \ 2019" copy "$ (ProjectDir) bin \ debug * .dll" "$ (AppData) \ Autodesk \ REVIT \ Addins \ 2019"

Эта команда скопирует adin и dll в папку, в которой revit сможет найти его, таким образом, у вас будет текущая сборка в revit.

4. (Дополнительный шаг). Вы также можете автоматически открыть проект, чтобы упростить его, перейдите в «Отладка» -> «Параметры запуска» -> «Аргументы командной строки» и укажите путь к файлу .rvt.

...