.NET API С# для AutoCAD 2011. Не загружается сборка.
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .NET API С# для AutoCAD 2011. Не загружается сборка.

.NET API С# для AutoCAD 2011. Не загружается сборка.

Ответ
Поиск в этой теме
Непрочитано 17.06.2012, 23:36 #1
.NET API С# для AutoCAD 2011. Не загружается сборка.
Yura Agafonov
 
Инженер.
 
Minsk
Регистрация: 04.05.2012
Сообщений: 95

Решил сделать лабораторную N1 от Александра Ривилиса
http://images.autodesk.com/emea_apac...12-russian.zip
И сразу столкнулся с проблемой, вот мой код
Код:
[Выделить все]
 
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;

namespace Lab1
{
    public class Class1
    {
        [CommandMethod("HelloWorld")]
        public void HelloWorld()
        {
            Editor ed =
                Application.DocumentManager.MdiActiveDocument.Editor;
            ed.WriteMessage("\nЗдравствуй, Мир!");
        }
    }
}

в debug добавил acad.exe
при выполнении автокад запускается, но при вводе в к.строку HelloWorld
неизвестная команда "HelloWorld".
Плюс ко всему когда при помощи netload загружаю lab1.dll
вот что говорит автокад

"Не удалось загрузить сборку. Сведения об ошибке:
System.BadImageFormatException: Could not load file or assembly
'file:///E:\work\с#\Projects\Lab1\Lab1\Lab1\bin\Debug\Lab1.dll' or one of its
dependencies. This assembly is built by a runtime newer than the currently
loaded runtime and cannot be loaded.
File name: 'file:///E:\work\с#\Projects\Lab1\Lab1\Lab1\bin\Debug\Lab1.dll'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence
securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm,
Boolean forIntrospection, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
at loadmgd()
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure
logging.
To turn this feature off, remove the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog]."

Я новичек.
p.s. vs2010, AutoCad2011
Просмотров: 4895
 
Непрочитано 17.06.2012, 23:43
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Какая версия .NET?
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 17.06.2012, 23:48
#3
Yura Agafonov

Инженер.
 
Регистрация: 04.05.2012
Minsk
Сообщений: 95
Отправить сообщение для Yura Agafonov с помощью Skype™


4.0 30319 RTMRel
Yura Agafonov вне форума  
 
Непрочитано 18.06.2012, 08:20
#4
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


А автокад 2011 работает с версией 2...какая-то (короче Net framework 3.5)
Вот тут почитай 5 вопрос - там слегка о другом, но тебе подойдет

З.Ы. И когда ты запускаешь отладку (debug) - это не значит, что твой код (твоя dll'ка) автоматически грузится в автокад
Modis вне форума  
 
Непрочитано 18.06.2012, 11:01
#5
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Yura Agafonov Посмотреть сообщение
This assembly is built by a runtime newer than the currently
loaded runtime and cannot be loaded.
Вот он собственно тебе и пишет в чём проблема. Компилируй под 3.5 SP1 и будет тебе счастье.
UPD
Вот как раз по твоему вопросу материал.
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:

Последний раз редактировалось hwd, 18.06.2012 в 11:16.
hwd вне форума  
 
Автор темы   Непрочитано 18.06.2012, 12:07
#6
Yura Agafonov

Инженер.
 
Регистрация: 04.05.2012
Minsk
Сообщений: 95
Отправить сообщение для Yura Agafonov с помощью Skype™


ясно. а есть ли у меня варианты не сносить фрэйм ворк. например поставить 13 автокад.
Yura Agafonov вне форума  
 
Непрочитано 18.06.2012, 12:23
#7
hwd

C, C++, C#
 
Регистрация: 07.10.2009
С-Пб.
Сообщений: 2,762
Отправить сообщение для hwd с помощью Skype™


Цитата:
Сообщение от Yura Agafonov Посмотреть сообщение
ясно. а есть ли у меня варианты не сносить фрэйм ворк. например поставить 13 автокад.
А что, есть варианты чтобы сносить?
__________________
Надеюсь, ты не социальный овощ? Это определяется делами! :welcome:
hwd вне форума  
 
Непрочитано 18.06.2012, 15:19
#8
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Yura Agafonov Посмотреть сообщение
ясно. а есть ли у меня варианты не сносить фрэйм ворк. например поставить 13 автокад.
Сносить фреймворк?
Modis вне форума  
 
Автор темы   Непрочитано 18.06.2012, 22:06
#9
Yura Agafonov

Инженер.
 
Регистрация: 04.05.2012
Minsk
Сообщений: 95
Отправить сообщение для Yura Agafonov с помощью Skype™


Спасибо. С .NET 3.5 все заработало. То есть 2011 автокад с .NET framework 4.0 не дружит.
Yura Agafonov вне форума  
 
Непрочитано 18.06.2012, 22:23
#10
Modis


 
Регистрация: 12.06.2010
Липецк, Москва
Сообщений: 534


Цитата:
Сообщение от Yura Agafonov Посмотреть сообщение
Спасибо. С .NET 3.5 все заработало. То есть 2011 автокад с .NET framework 4.0 не дружит.
Слегка неверное мнение Он как-бы "заточен" под 3.5, но и с 4.0 вполне может "дружить"...
Modis вне форума  
 
Непрочитано 23.05.2024, 16:37
#11
Flexius


 
Регистрация: 23.05.2024
Сообщений: 3


Здравствуйте.
Та же самая проблема: VS2019, Autocad 2021 x64, пробовал .NET 4.7.2, .NET 4.8 (с более низкой не компилирует VS), DLL пробовал из пакета ARX подгружать, из папки AutoCad - ничего не изменилось.
Подскажите, пж., что еще можно сделать, чтоб NETLOAD сработал?
Flexius вне форума  
 
Непрочитано 24.05.2024, 14:11
#12
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,406


Сделать класс с командами статическим.
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 24.05.2024, 17:22
#13
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Flexius Посмотреть сообщение
пробовал .NET 4.7.2, .NET 4.8
лучше не подбирать, а смотреть по справочным данным
Сергей812 вне форума  
 
Непрочитано 24.05.2024, 19:49
#14
Flexius


 
Регистрация: 23.05.2024
Сообщений: 3


Цитата:
Сообщение от Кулик Алексей aka kpblc Посмотреть сообщение
Сделать класс с командами статическим.
Команда у меня статическая (или речь именно о командном классе, который у меня ссылочный?). Код я взял у кого-то на просторах интернета (в коде не должно быть ошибки). Команда должна вернуть выбранные объекты в Автокаде.

Код:
[Выделить все]
 #pragma once
using namespace System;
using namespace Autodesk::AutoCAD::Runtime;
using namespace Autodesk::AutoCAD::ApplicationServices;
using namespace Autodesk::AutoCAD::EditorInput;
using namespace Autodesk::AutoCAD::DatabaseServices;

namespace ClassLibrary1 {
	/// <summary>
	/// Коммандный класс для тестовой команды
	/// </summary>
	public ref class CommonClass
	{
		/// <summary>
		/// Командный метод для запуска команды
		/// </summary>
	public:
		CommonClass()
		{
		}
		[CommandMethod("TestCMD")]
		static void TestCMD()
		{
			DocumentCollection^ docMgr	= Application::DocumentManager;
			Document^ doc				= docMgr->MdiActiveDocument;
			Database^ db				= doc->Database;
			Editor^ ed					= doc->Editor;
			PromptEntityResult^ per
				= ed->GetEntity("Select an entity : ");
			if (per->Status != PromptStatus::OK)
				return;
			ObjectId oid = per->ObjectId;

			Transaction^ tr
				= db->TransactionManager->StartTransaction();

			Entity^ ent
				= (Entity^)tr->GetObject(oid, OpenMode::ForRead);

			ed->WriteMessage(ent->GetRXClass()->Name);

			tr->Commit();
			tr->~Transaction();
		}
	};
}
[assembly:CommandClass(ClassLibrary1::CommonClass::typeid)];


----- добавлено через ~1 мин. -----
Цитата:
Сообщение от Сергей812 Посмотреть сообщение
лучше не подбирать, а смотреть по справочным данным
Сначала так и сделал. Как не сработало, начал искать причину "научным тыком")
Flexius вне форума  
 
Непрочитано 24.05.2024, 20:08
1 | #15
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


и тут неожиданно Managed C++ появился)

----- добавлено через ~41 мин. -----
Вот примерно как будет выглядеть ваш код на обычном .NET

Код:
[Выделить все]
 
// AutoCAD
using Autodesk.AutoCAD.ApplicationServices;
using Autodesk.AutoCAD.DatabaseServices;
using Autodesk.AutoCAD.EditorInput;
using Autodesk.AutoCAD.Runtime;


namespace TestSelectEntity
{

    public class Commands
    {

        [CommandMethod("TestCMD")]
        public void TestCMD()
        {
            Document lDoc = Application.DocumentManager.MdiActiveDocument;
            Database lDb = lDoc.Database;
            Editor lEd = lDoc.Editor;
            PromptEntityResult lPER = lEd.GetEntity("\nВыберите объект:");
            if (lPER.Status != PromptStatus.OK) return;
            using (Transaction lTr = lDb.TransactionManager.StartTransaction())
            {
                Entity lEnt = (Entity)lTr.GetObject(lPER.ObjectId, OpenMode.ForRead);
                lEd.WriteMessage("Type = {0}\n", lEnt.GetRXClass().Name);
                lTr.Commit();
            }
        }

    }

}
Сергей812 вне форума  
 
Непрочитано 25.05.2024, 12:10
#16
Flexius


 
Регистрация: 23.05.2024
Сообщений: 3


Цитата:
Сообщение от Сергей812 Посмотреть сообщение
и тут неожиданно Managed C++ появился)
Так работает, спасибо. На плюсах, как я понимаю, лучше в .NET не писать - много проблем поймать можно?
Flexius вне форума  
 
Непрочитано 27.05.2024, 00:02
#17
Сергей812


 
Регистрация: 10.08.2013
Сообщений: 11,499


Цитата:
Сообщение от Flexius Посмотреть сообщение
Так работает, спасибо. На плюсах, как я понимаю, лучше в .NET не писать - много проблем поймать можно?
ну почему, вопрос просто в потребностях и какими языками программирования человек владеет на момент начала программирования в акаде.

Есть ObjectARX - самой полный доступ к возможностям акада на низкоуровневом С++. Есть "обертка" над ObjectARX на управляемом коде .Net - для многих прикладных задач его возможностей более чем достаточно. Вы умудрились взять пример на Managed C++ - т.е. и не чистые плюсы, и не чистый .Net)
Сергей812 вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > .NET > .NET API С# для AutoCAD 2011. Не загружается сборка.



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
перепривязка Advance Steel 2011 к платформе AutoCAD 2010 Abzorbo Advance Steel 2 18.01.2012 19:28
Настройки AutoCAD 2011 в AutoCAD 2012 Fedorino AutoCAD 1 09.11.2011 09:11
Проблема открытия чертежа AutoCAD Civil 3D 2011 в более ранных версиях AutoCAD rassom Вертикальные решения на базе AutoCAD 5 29.12.2010 11:20
AutoCAD 2011 и ошибка при изменении Z координаты 3D полилинии, через палитру свойств gomer8 AutoCAD 9 16.12.2010 13:12
Посоветуйте книги для изучения AutoCAD 2011 Bikerider Поиск литературы, чертежей, моделей и прочих материалов 7 11.12.2010 17:46