WinSxS не может загрузить библиотеки DLL VC ++ - PullRequest
10 голосов
/ 02 февраля 2012

У меня проблема с несколькими библиотеками VC ++, которые я должен включить в мой проект .NET / C #. Одна библиотека VC ++ - это C ++ / CLI DLL, которую я использую в качестве открытого интерфейса из моего проекта .NET. Другие библиотеки написаны на родном C ++. У меня нет доступа к источнику библиотек VC ++, я просто должен их использовать.

Я создал тестовый проект .NET и ссылался на C ++ / CLI DLL. Нет проблем, компилятору повезло, отлично. Есть только одна проблема: когда я запускаю EXE-файл программы .NET, я получаю ошибки о библиотеках C ++ из-за отсутствия основных библиотек VC ++. sxstrace показывает следующее (сокращенно):

INFO: Reference: Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Reference: Microsoft.VC80.OpenMP,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
INFO: Resolving reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195"
...
ERROR: Cannot resolve reference Microsoft.VC80.CRT,processorArchitecture="x86",publicKeyToken="1fc8b3b9a1e18e3b",type="win32",version="8.0.50727.6195".

Теперь я не дурак и попробовал несколько вещей. Я много читал о WinSxS, чтобы глубже понять, что происходит. Теперь я нахожусь в точке, где это становится утомленным для меня. Система, в которой я хочу выполнить программу, имеет распространяемый пакет VC ++ в текущей версии 8.0.50727.762 (SP1). Я знаю, что есть файл политики для Microsoft.VC80.CRT в winsxs, который перенаправляет все версии этой сборки на текущую версию 8.0.50727.762 (это решение проблемы на http://blogs.msdn.com/b/nikolad/archive/2007/03/29/a-solution-to-two-references-to-different-versions-of-crt-mfc-atl-in-one-application-manifest-file.aspx). Но, как говорится в приведенной выше ошибке, этот файл политики не работает или не принимается во внимание. Система просто хочет найти версию сборки 8.0.50727.6195.

Теперь это первый вопрос: в чем здесь проблема? После того, как я понял это, я смог решить начальную проблему ...

1 Ответ

9 голосов
/ 06 февраля 2012

Хорошо, теперь это работает - спасибо за вашу помощь.

Я выяснил две проблемы, которые нужно было решить:

1) Мне пришлось установить «Обновление безопасности MFC распространяемого пакета обновления 1 для Microsoft Visual C ++ 2005», в котором развернута версия 8.0.50727.6195 сборок VC ++. Это обновление было трудно найти на серверах Microsoft, поэтому вот ссылка: http://www.microsoft.com/download/en/details.aspx?id=26347 Обычно вы найдете только версию 8.0.50727.762 («Распространяемый пакет Visual C ++ 2005 с пакетом обновления 1»), которая устарела. Поскольку библиотеки C ++ были скомпилированы для 6195, установка обновления решила первую проблему.

2) В то время как DLL-библиотека C ++ / CLI была скомпилирована в режиме Release, собственные библиотеки C ++ DLL, представленные ниже, были доставлены в режиме Debug. Теперь лицензионное соглашение Microsoft запрещает развертывание библиотек DLL отладки VC ++, а в пакеты Redist VC ++ не включены библиотеки DLL отладки VC ++. http://msdn.microsoft.com/en-us/library/aa985618.aspx говорит:

Отладочные версии приложения не подлежат распространению, и ни одна из отладочных версий различных библиотек динамической компоновки (DLL) Visual C ++ не распространяется.

Решение: разработчики собственных библиотек C ++ предоставили мне релизную версию, и все работает отлично ...

...