Ссылка на presentationcore.dll в смешанном режиме DLL - PullRequest
2 голосов
/ 17 января 2012

У нас есть библиотека смешанного режима, написанная на C ++, которая оборачивает собственные библиотеки C ++ и предоставляет управляемые классы.В предоставляемых управляемых классах мы используем аргументы метода типа Vector3D и т. Д., Которые являются частью PresentationCore.DLL.

Следовательно, код C ++ в смешанном режиме должен ссылаться на PresentationCore.DLL.Мы делаем это через

#using <PresentationCore.dll>

, который требует, чтобы путь поиска проекта включал папку, в которой находится PresentationCore.dll.

Это плохо, потому что эти папки различаются на разных машинах и в наших проектахнужно без изменений скомпилировать на нескольких машинах.На данный момент мы решили эту проблему, включив копию PresentationCore.dll в наш репозиторий кода, что, очевидно, не является хорошим решением.

Буду признателен за предложения, как можно обойтись без указания явногопуть к DLL, которая должна быть идеально доступна через GAC.

Ответы [ 3 ]

1 голос
/ 06 марта 2012

Не делай #using <PresentationCore.dll>. Вам нужно щелкнуть правой кнопкой мыши по проекту, перейти к References..., щелкнуть Add New Reference... и выбрать PresentationCore на вкладке .Net. Я получил подсказку от:

http://msdn.microsoft.com/en-us/library/aa970266.aspx

0 голосов
/ 14 сентября 2012

Фу, я получил это работает.У меня есть собственный проект, и у меня была та же проблема, мне нужно использовать HwndSource из PresentationCore, чтобы провести некоторый анализ hwnds.Я оставил свой проект как собственный (без переключателя / clr), затем для моего исходного файла, в котором была функция, использующая HwndSource, я добавил переключатель / clr, чтобы я мог содержать настройки для других источников, например обработку исключений.и тому подобное.

#using <System.dll>
#using <WindowsBase.dll>
#using <PresentationFramework.dll>
#using <PresentationCore.dll>
#using <UIAutomationProvider.dll>
#using <UIAutomationTypes.dll>

Это прекрасно работает, вы просто не получите поддержку Intellisense.И некоторые предупреждения в выводе, если вы можете жить с этим, это для вас.

0 голосов
/ 22 января 2012

GAC находится в% windir% \ Assembly \, а затем в подкаталоге GAC_32 или GAC_64

. В такой ситуации я использовал бы символическую ссылку.Создайте ссылку на DLL в локальном каталоге.Затем скомпилируйте по этой ссылке.

Да, вы должны изменить его для каждой машины.Но все, что вам нужно сделать, - это выполнить одну строку пакетного скрипта.

Рассмотрите этот вариант на моем компьютере.

C:\temp>for /f "tokens=*" %f in ('dir \windows\assembly\presentationcore.dll  /s/b') do @echo %f
C:\windows\assembly\GAC_32\PresentationCore\3.0.0.0__31bf3856ad364e35\PresentationCore.dll
C:\windows\assembly\GAC_64\PresentationCore\3.0.0.0__31bf3856ad364e35\PresentationCore.dll

Выберите тот, который вам нужен (скажем, GAC_64), и установитессылка на него - это все, что вам нужно.

@for /f "tokens=*" %f in ('dir \windows\assembly\presentationcore.dll  /s/b') do @echo %f | @findstr GAC_64 | mklink .\presentationCore.dll "%f"
...