Раньше у меня была COM DLL-библиотека Visual Basic (VB6) (назовем ее «dllouter»), которая ссылалась на другую COM DLL-библиотеку Visual Basic (VB6) (назовем ее «dllinner») с интерфейсом «Интерфейс».«dllouter» загрузил «dllinner» следующим образом:
Public objCom As dllinner.Interface
Set objCom = New dllinner.Interface
Когда версия «dllinner» изменилась, без изменений в «Interface», «dllouter» смог загрузить его без проблем, без необходимости перекомпиляцииit.
После этого я заменил «dllinner» на сборку C # .NET (VS2015) на [assembly: ComVisible(true)]
и перекомпилировал «dllouter», все было нормально и работало.
Но если яизменить [assembly: AssemblyVersion("1.0.0")]
на более новую версию, тогда Set objCom = New dllinner.Interface
не удастся.Мне нужно перекомпилировать «dllouter» после обновления ссылки на новый «dllinner», чтобы он заработал.
Я заметил, что сравнивая файлы .vbp со ссылками на Visual Basic «dllinner» и .NET «dllinner»"есть разница в версии, указанной после GUID:
Reference = * \ G {6B0651C5-5225-42A6-841F0322797E5018} # 1.0 # 0 # ...
Значение, выделенное полужирным шрифтом, обновляется для сборки .NET с новой версией сборки (например, 2.0), в то время как оно остается неизменным для ссылки DLL Visual Basic (всегда 1.0, независимо от версии dllinner).
Таким образом, я попытался добавить свойство [assembly: TypeLibVersion(1,0)]
в assemblyinfo.cs, и это «исправляет» ссылку в .vbp, означая, что значение, выделенное жирным шрифтом, сохраняется равным 1,0, независимо от того, что такое AssemblyVersion.Однако проблема не решена: «dllouter» все еще не может загрузить «dllinner».
Есть ли способ исправить эту проблему, избегая перекомпиляции «dllouter» каждый раз, когда изменяется версия «dllinner»?