Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
0 / 0 / 0
Регистрация: 05.07.2010
Сообщений: 3
1

Хитрости CLR.

05.07.2010, 18:49. Просмотров 1908. Ответов 6
Метки нет (Все метки)

Здравствуйте!
Есть 2 вопроса-проблемы.
1) Есть сборка, в ней объект. Объект и сборка эволюционируют и соответственно имеются их разные версии. Все версии сборок есть в GAC и зарегистрированы. Есть ли возможность из неуправляемого кода (на C++) получить объект из сборки конкретной версии? Сейчас, судя по всему, берется сборка с наиболее поздней версией при попытке создания объекта из неуправляемого кода (CoCreateInstance).
2) Есть exe-шник на C++. Он создает объект из .Net сборки. Сборка лежит под ногами у exe-шника. Хочется использовать сборку без GAC. Если запускать exe-шник из папки, где он находится - все работает, если же запускать, например, по сетевому пути - нет - объект из сборки не создается (по-видимому, из-за того что Current Directory становится не та, где находится). Можно ли как то обойти эту проблему, чтобы объект создавался в любом случае?
Заранее благодарен.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.07.2010, 18:49
Ответы с готовыми решениями:

CLR и Garbage Collector
всем доброго времени суток! Если не вызывать GC.Collect() то среда CLR автоматически убирает...

Серверная версия CLR.
Хочу запустить приложение на серверной CLR. Использую функцию CorBindToRuntimeEx, но в MSDN...

CLR сборка и стороняя dll
Добрый день! Столкнулась с такой проблемой: у меня есть сборка, которая реализует...

Глубокое изучение NET CLR
Всем привет! Поделитесь книгами или ресурсами с актуальной информацией о "кишках" NET CLR !...

6
мну довольно <(-__-)l
214 / 203 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
05.07.2010, 21:57 2
Передавай адрес директории через параметр запуска.
Я так понимаю процесс запускается на твоем компьютере. Прежде чем запуститься, файл скорее всего копируются в какую-то временную директорию, типа "%curuser%/local settings/temp/"...

Вот и передай в параметре как ты добрался к этому файлу...=)
1
1303 / 976 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
06.07.2010, 10:46 3
1) надо подписать сборку и идентифицировать ее по публичному ключу
2) не надо подписывать сборку, а пользоваться надо Assembly.LoadFrom
1
0 / 0 / 0
Регистрация: 05.07.2010
Сообщений: 3
06.07.2010, 14:47  [ТС] 4
Большое спасибо за ответы.

gGrn-7DA, я создаю объекты посредством CoCreateInstance, примерно следующим образом:
CoCreateInstance (<CLSID>, 0, CLSCTX_INPROC_SERVER, <Interface_ID>, (void**)&m_MyClass); я не очень понимаю, как мне может помочь параметр в виде директории... Может можно как то по-другому создавать объекты написанные на C# из неуправляемого кода C++? Буду очень признателен, если намекнете.
Mikant, Идентифицировать по публичному ключу? Это добавить *.snk файл? Тогда есть такой. Но только я опять же не понимаю, как CoCreateInstance различит эти сборки. Мне кажется она меня не спрашивает никак об этом...
Assembly.Load это на сколько я понимаю класс.метод из C# (.Net), а я хочу создавать .Net класс из неуправляемого С++. Или я не прав?
0
мну довольно <(-__-)l
214 / 203 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
06.07.2010, 15:04 5
Я всего лишь предположил как можно решить эту пролему. Я несведуч в этом деле. Но как я сказал получается что ты запускаешь приложние у себя, а не на том компьютере где оно лежит. решение на С++ предложить не смогу, да и на шарпе тоже врядли=) но скорее всего нужно создать у клиента службу отвечающую за работу с твоим приложением=)
0
1303 / 976 / 127
Регистрация: 08.12.2009
Сообщений: 1,299
06.07.2010, 22:40 6
сначала надо отбить сборку по строгому имени, публичному ключу и версии, взять именно её и генерить объект (вручную)
0
0 / 0 / 0
Регистрация: 05.07.2010
Сообщений: 3
07.07.2010, 11:38  [ТС] 7
Mikant, что значит отбить сборку? Как это сделать? И что значит генерировать объект вручную? Это как? CoCreateInstance это не вручную?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2010, 11:38

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Интеграция сторонней dll в MSSQL CLR
Добрый день, друзья! Хочу попросить помощи в данном вопросе Занимаюсь разработкой...

CLR: чем сборки отличаются от библиотек
Собственно,вопрос задан в заголовке темы. Чем они лучше dll библиотеки?

Ошибка при обращении к С++ CLR проекту
Пишу программу в VisualStudio, состоящую из С++ CLR проекта и С#. На другом компьютере, где...

Вышла книга CLR via C# на русском языке
CLR via C#. Программирование на платформе Microsoft .NET Framework 4.0 на языке C#. Автор: Джеффри...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.