У меня довольно сложное wpf-приложение, которое использует MEF для загрузки дополнительных компонентов. Это прекрасно работает со стандартным установщиком.
Я пытаюсь заставить это работать с использованием развертывания ClickOnce, и когда приложение предполагает импортировать возможные компоненты MEF, я получаю исключение:
System.ComponentModel.Composition.CompositionException: Композиция вызвала единственную ошибку композиции. Основная причина приведена ниже. Просмотрите более подробную информацию о свойстве CompositionException.Errors.
1) Удаленный сервер возвратил ошибку: (404) Not Found.
Результат: возникла исключительная ситуация при попытке создать экземпляр типа «Client.Map.GeneralXamlMap.GeneralMapViewModel».
Результат: невозможно активировать часть 'Client.Map.GeneralXamlMap.GeneralMapViewModel'.
Элемент: Client.Map.GeneralXamlMap.GeneralMapViewModel -> Client.Map.GeneralXamlMap.GeneralMapViewModel -> AssemblyCatalog (Assembly = "Client.Map.GeneralXamlMap, Версия = 1.0.0.0, Культура = нейтральная, PublicKeyToken = 101)" *
В результате: не удалось получить экспорт 'Client.Map.GeneralXamlMap.GeneralMapViewModel (ContractName = "Client.Core.Core.Map.IMapViewModel") "из части" Client.Map.GeneralXamlMap.GeneralMapViewModel ".
Элемент: Client.Map.GeneralXamlMap.GeneralMapViewModel (ContractName = "Client.Core.Core.Map.IMapViewModel") -> Client.Map.GeneralXamlMap.GeneralMapViewModel -> AssemblyCatalog (Assembly = "Client.Map.Mapral =am 1.0.0.0, Культура = нейтральная, PublicKeyToken = null ")
Я проверил локальную папку, и dll с экспортом находится в папке, как и ожидалось. Код, используемый для поиска экспорта, выглядит следующим образом:
public static IMapViewModel FindMap(string exportMetadataMapName)
{
var catalog = new AggregateCatalog();
catalog.Catalogs.Add(new AssemblyCatalog("Client.Map.GeneralXamlMap.dll"));
CompositionContainer container = new CompositionContainer(catalog);
MapFactory f = new MapFactory();
container.ComposeParts(f);
foreach (Lazy<IMapViewModel, IMapMetaData> item in f.maps)
{
if (item.Metadata.Name.Equals(exportMetadataMapName))
{
return item.Value;
}
}
return null;
}
Есть идеи?
Обновление: я не знаю, почему я не видел этого раньше, но компонент, который я пытаюсь загрузить, - это wpf usercontrol, который загружает изображение из URL. Когда я удаляю этот URL, он работает. Может ли это быть связано с безопасностью? Установщик Click Once - это полное доверие.