Я бы добавил пользовательский атрибут в ваши сборки.Вы можете проверить каждую сборку для атрибута, прежде чем двигаться вперед с регистрацией номера версии.
Мой синтаксис может быть неправильным, но ...
System::Type^ type = System::Type::GetType("UtilsDotNet.Foo");
array<Object^>^ attributes = assembly->GetCustomAttributes(type, false);
должно быть
array<Object^>^ attributes = assembly->GetCustomAttributes(__typeof(InitOnLoad), false);
Я не уверен, что в C ++ можно пометить сборку атрибутом, но в C # можно поместить эту строку в файл Assembly.cs (в папке Properties)
[assembly: InitOnLoad()]
Кроме того, у вас не должно быть кода для перечисления сборок в конструкторе атрибута.Если вы сделаете это, этот код будет запускаться каждый раз, когда будет найден один из этих атрибутов.Я поместил бы этот код в отдельный метод, возможно, статический метод для атрибута.
Наконец, имейте в виду, что если вы работаете со сборками с поздним связыванием, вам также необходимо прослушивать событие AssemblyLoad.