Tlbexp.exe cambia caso i nomi dei metodi
Domanda
Ho un problema piuttosto strano. Sono esportare un'interfaccia da una libreria C # per COM. Ho permesso 'registrare con COM' l'impostazione del progetto, in modo che le chiamate Tlbexp.exe per fare le librerie tipo.
Usiamo caso cammello su nostri nomi di metodo e ho notato che la libreria dei tipi esportati cambia questi qualsiasi metodo che coincide con un nome di classe per caso Pascal ...
es
interface IFoo
{
void randomClass()
}
class RandomClass
{
}
L'IFoo esportati tipo lib definisce IFoo-> RandomClass () anziché IFoo-> randomClass ()
Tutte le idee su ciò che causa questo e come fermarlo?
Soluzione
Dal COM è case-insensitive, sia "RandomClass" e "randomClass" sono lo stesso simbolo nella tabella della biblioteca di uscita. (Questo è parte del motivo per cui le linee guida raccomandano .NET PascalCasing per i nomi e metodi della classe.)
Quello che viene scelto sarà il primo dei emette compilatore, e questo è abbastanza non deterministico dal punto di vista di un programmatore!
È possibile scegliere uno o l'altro, utilizzando il parametro /names
di TlbExp, ma entrambe le intelaiature non possono coesistono nella biblioteca.
Per usare TlbExp del file nomi, è sufficiente creare un file con un elenco di identificatori, uno per riga:
RandomClass
SomeOtherIdentifier
Poi si chiama in questo modo:
tlbexp MyAssembly.dll /names=MyNames.txt
TlbExp utilizzerà quindi la versione del simbolo definito nel file di nomi.