Поддерживайте правильную версию для библиотеки DLL COM, на которую ссылается .NET project
Вопрос
Я хочу сослаться на COM-библиотеку DLL в проекте .NET, но я также хочу убедиться, что созданная библиотека взаимодействия DLL будет иметь правильную версию (чтобы исправления знали, когда DLL необходимо изменить).
Если я использую TlbImp
Я могу указать требуемую версию с помощью /asmversion
флаг, но когда я добавляю его непосредственно из Visual Studio, он получает версию, которая не имеет ничего общего с версией исходной COM DLL.
Я попытался изменить версию в .vcproj
файл
<ItemGroup>
<COMReference Include="MYDLLLib">
<Guid>{459F8813-D74D-DEAD-BEEF-00CAFEBABEA5}</Guid>
<!-- I changed this -->
<VersionMajor>1</VersionMajor>
<!-- This too -->
<VersionMinor>0</VersionMinor>
<Lcid>0</Lcid>
<WrapperTool>tlbimp</WrapperTool>
<Isolated>False</Isolated>
</COMReference>
</ItemGroup>
Но затем проект не удалось собрать со следующей ошибкой:
ошибка CS0246:Не удалось найти тип или имя пространства имен 'MYDLLLib' (вам не хватает директивы using или ссылки на сборку?)
Есть ли какой-нибудь способ сделать это без создания всех моих ссылок COM с помощью TlbImp
заранее?
Если ответ таков ДА есть ли способ указать номер сборки в дополнение к основной и второстепенной версиям?(например, 1.2.42.0)
Решение
Guid ссылается на Guid для TypeLib, а не непосредственно на DLL.Номера версий относятся к версии TypeLib, а не к библиотекам DLL.
Номер версии будет взят из вашего idl-файла, и я полагаю, что он поддерживает только основную и второстепенную версии, а не версию сборки.Меняется ли эта версия при изменении typelib?
Номера версий появятся в реестре в разделе:
HKEY_CLASSES_ROOT\Typelib\{typelib uuid}\Major.Minor
Если для младшей версии установлено значение 0, то я полагаю, что она импортирует "последнюю" версию, соответствующую основной версии, но для основной версии должно быть установлено значение something.