Поддерживайте правильную версию для библиотеки DLL COM, на которую ссылается .NET project

StackOverflow https://stackoverflow.com/questions/41832

  •  09-06-2019
  •  | 
  •  

Вопрос

Я хочу сослаться на 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.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top