понедельник, 5 декабря 2011 г.

О ссылках на сборки в .net

Сразу скажу, с проблемой столкнулся в Silverlight приложении, после того как решил проблему, с такой же ситуацией столкнулся Потапов Андрей, когда писал dll загрузки файлов в SharePoint. Поэтому решил отписаться, вдруг еще кому сэкономлю полчасика поиска.
Собственно проблема - делаем ссылку на внешнюю сборку,  из своей сборки. А потом, в приложении которое использует нашу сборку возникает непонятный Exception.

Итак, у нас есть SL приложение и SL библиотека, в которой захотелось использовать Toolkit.
Как это выглядит:
В контроле может быть так:

<UserControl   x:Class="Controls.WebLib.RedRectangleWithContextMenu"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:toolkit="http://schemas.microsoft.com/winfx/2006/xaml/presentation/toolkit"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
    <Rectangle Fill="Red" RadiusX="10" RadiusY="10" x:Name="rcBackground">
        <toolkit:ContextMenuService.ContextMenu>
            <toolkit:ContextMenu>
                <toolkit:MenuItem Header="Зеленый" Click="MenuItem_Click" />
            toolkit:ContextMenu>
        toolkit:ContextMenuService.ContextMenu>
    Rectangle>   
UserControl>
Ну и в главную форму, не забываем кинуть наш контрол:

<UserControl xmlns:my="clr-namespace:Controls.WebLib;assembly=Controls.WebLib"  x:Class="Main.WebApp.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    d:DesignHeight="300" d:DesignWidth="400">
 
    <Grid x:Name="LayoutRoot" Background="White">
        <my:RedRectangleWithContextMenu />
    Grid>
UserControl>Первое, что нас напряжет, это вот такой его вид:
Но приложение сбилдится, и даже запуститься, но во время выполнения упадет:
На самом деле все просто, главное приложение пытается создать экземпляр объекта из сборки... На которую у него нет ссылки! Чтобы все заработало, достаточно ее добавить:
Собственно все начинает работать:

Комментариев нет:

Отправить комментарий