Время от времени я получаю это, и простое отключение / повторное подключение устройства помогает.
Вы можете использовать атрибут переименовать для импорта , чтобы явно переименовать свойства. Допустим, у вас есть propA
, который иногда становится PropA
и propB
, который иногда становится PropB
. Чтобы всегда иметь PropA
и PropB
, используйте переименовать следующим образом:
#import <library> rename( "propA", "PropA" ) rename( "propB", "PropB" )
Используйте это осторожно - это вызывает простую замену текста, которая работает для любых идентификаторов, с которыми он сталкивается в библиотеке типов. В некоторых случаях это может вызвать нежелательные побочные эффекты, которые сложно устранить.
Проверка работоспособности: вы абсолютно уверены, что одна и та же директива #import используется на обеих машинах? т.е. точно такие же исходные файлы компилируются?
Попробуйте создать общий сетевой ресурс в каталоге, содержащем проект, и откройте его на другом компьютере, чтобы быть на 1000% уверенным, что это те же исходные файлы, которые компилируются.
Извините, я не знаю '
У меня такая же проблема.
С помощью другого вопроса SO ( https://stackoverflow.com/questions/708721/compare-type-libraries-generated-by-tlbexp ) я нашел этот фрагмент контента сообщества:
http : //social.msdn.microsoft.com/Forums/en-US/clr/thread/5003c486-ed3f-4ec8-8398-a1251b0f9e74
Цитата из этого содержания:
В документации tlbexp есть один полезный контент сообщества:
http://msdn2.microsoft.com/en-gb/library/hfzzah2c (VS.80) .aspx
Цитата:
«Причина использования параметра / names заключается в том, что тип библиотеки хранят каждый идентификатор в таблице без учета регистра. Выигрывает первый обнаруженный случай. Таким образом, класс с именем Monitor может в конечном итоге быть представлен как «монитор», если первым встречается параметр с таким именем (и порядок, в котором идентификаторы встречающиеся могут измениться, просто перекомпилировав вашу сборку!) / names может гарантировать стабильную оболочку. "
Основная причина, по-видимому, заключается в ошибке в midl, описанной здесь:
http://support.microsoft.com/default .aspx? scid = kb; en-us; 220137
Цитата:
«Когда есть два идентификатора, которые различаются только регистром, регистр второго идентификатора изменяется, чтобы отразить регистр первого».
В качестве решения я снял отметку с опции «зарегистрировать для COM. interop "в настройках проекта и добавил шаги после сборки
" $ (DevEnvDir) .... \ SDK \ v2.0 \ Bin \ tlbexp "$ (TargetFileName) / names:" $ (ProjectDir) Names .текст" % windir% \ Microsoft.NET \ Framework \ v2.0.50727 \ regasm $ (TargetFileName)
Файл имен содержит записи, которые определяют, как следует выполнять капизацию.В моем случае он содержит только одну строку:
ID
С уважением
Бернд Риттер
Использование / names решило эту проблему для меня.