"Zarejestruj się na COM Interop" vs " Make assembly COM visible"

Jaka jest prawdziwa różnica między tymi dwoma opcjami? To co wiem to:

Zarejestruj się na COM Interop
Ta opcja uruchamia regasm na złożeniu i rejestruje złożenie jako komponent COM (a może nie) w rejestrze ze wszystkimi wpisami rejestru podobnymi do COM. Czy ten krok generuje plik TLB? Co jeszcze zostało zrobione?

Czasami widzę, że tlb jest generowany podczas kompilacji projektu, ale czasami nie, dlaczego tak jest?

Make assembly COM visible
Jaki to ma wpływ na montaż? Jeśli mam następujący typ wewnątrz tego zestawu, czy nadal muszę określić "Make assembly COM Visible", mimo że mój typ jest oznaczony jako ComVisible?

[GuidAttribute("02810C22-3FF2-4fc2-A7FD-5E103446DEB0"), ComVisible(true)]
public interface IMyInterface
{
}
Author: A9S6, 2010-09-13

1 answers

"Make assembly COM visible" jest dużym młotkiem do tworzenia wszystkich typów publicznych w assembly [ComVisible]. Rzadko pożądane, będziesz chciał wybrać konkretne typy, które chcesz być widoczny, tak jak to zrobiłeś w swoim fragmencie.

Po zbudowaniu zestawu należy go zarejestrować, aby Klient COM mógł go znaleźć. Który używa tylko liczby do identyfikacji obiektu, który chce utworzyć, GUID, dodatkowe wyszukiwanie jest konieczne, aby dowiedzieć się, co DLL implementuje go. Rejestracja polega na zapisaniu kluczy w HKLM\Software\Classes\CLSID\{guid} części rejestru. Możesz to zrobić samodzielnie, uruchamiając Regasm.exe /codebase /tlb lub pozostawić to systemowi budowania, który zrobi to automatycznie po zbudowaniu zestawu.

Czyli co robi "Register for COM interop". Jest to pożądane, ponieważ zapewnia, że stara Kopia DLL zostanie automatycznie Niezarejestrowana przed nadpisaniem, co zapobiega zanieczyszczeniu rejestru. VS musi uruchomić podwyższony, aby mieć dostęp do zapisu tych kluczy rejestru, jeden powód dla co czyni go opcjonalnym. Lub po prostu nie chcesz go zarejestrować, powszechne na serwerach build. Nie mogę skomentować, dlaczego czasami nie dostajesz .tlb bez większej diagnostyki.

 93
Author: Hans Passant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-18 12:42:33