2016-01-29 2 views
0

Я пишу программу, которая использует ссылку WMPLib как часть проекта.Внедрение взаимодействия или нет?

Мой вопрос, я заметил на MSDN документации следующее:

https://msdn.microsoft.com/en-us/library/windows/desktop/dd564585(v=vs.85).aspx распространения приложения

При распространении приложения, не забудьте установить AxInterop.WMPLib.dll и Interop.WMPLib .dll в папке приложения. Вам также необходимо убедиться, что на компьютере пользователя установлена ​​требуемая версия проигрывателя Windows Media.

Когда я составляю мой проект, я заметил, что в исполняемом папке нет упоминания о WMPLib.dll или Interop.WMPLib.dll, несмотря на то, что он правильно упоминается в моем коде. Это до тех пор, пока я не изменю вариант «Вставить тип взаимодействия» от «Истина к ложному». Затем, когда я скомпилировать программу, я заметил, что файл `Interop.WMPLib.dll» становится доступным в базовой папке вместе с исполняемым файлом, который я только скомпилированный.

enter image description here

Это нормальное поведение для файл, который должен быть создан только в этом случае? Если я планирую распространять это приложение на других ПК с ОС Windows, должен ли я оставить «Embed Interop Type» равным false? Кроме того, должен ли я делать это со всеми моими ссылками, такими как Visual Basic PowerPack? Что относительно пакета Windows, который I used to be able to connect to an Access DB, есть что-то, что мне нужно сделать?

ответ

2

Статья устарела, она была написана до Был выпущен .NET 4.0. Первая версия (вместе с VS2010), которая начала поддерживать функцию «Вставить типы прерываний». Вы всегда предпочитаете использовать True. Вместо того, чтобы иметь типы взаимодействия COM, хранящиеся в сборке xyz.Interop.dll, они теперь копируются в сборку, которая их использует. Только те типы, которые вы используете. Так что совершенно нормально, что вы не видите их в каталоге сборки, вам они больше не нужны.

Он фактически решает гораздо большую проблему, получая PIA (первичные стыковые сборки), развернутые на машине. Релевантно, прежде всего, программам, которые взаимодействуют с Office. Обычно это не проблема при взаимодействии с WMP, поскольку вы не будете открывать какие-либо типы WMP из своих собственных сборок, которые будут использоваться другими приложениями. Если бы у вас возникли проблемы:

Visual Basic PowerPack - это обычная сборка .NET, а не сборка COM-соединений, поэтому с этим нельзя обращаться одинаково. «Доступ к OLEDB» слишком расплывчатый, полагайтесь на значение по умолчанию.

Основой является «эквивалентность типа», структурное улучшение CLR, которое может помочь типам из разных сборок считаться идентичными. Если вас интересует архитектура CLR, вы хотите посмотреть this video.

+0

Чтобы предоставить дополнительную информацию OLEDB: для того, чтобы мое приложение VB.NET читалось из AccessDB. Мой вопрос спрашивал, нужно ли мне что-то делать с приложением для ПК, у которого нет такого же пакета –

+0

В частности, мне нужно что-то особенное с распространяемым здесь соединением в этом ответе: http://stackoverflow.com/ a/27259078/692250. Я хочу сказать «нет», но я не уверен. –

+0

Пространство имен System.Data.OleDb встроено в структуру, поставщик данных ADO для Access предварительно установлен в операционной системе. Может быть, вы используете ACE, не знаю. Просто нажмите кнопку «Спросить вопрос», чтобы лучше документировать свой вопрос, хотя он, несомненно, уже где-то ответил. –