FileNotFoundException при обращении к проекту Silverlight из проекта ASP.NET - PullRequest
0 голосов
/ 20 февраля 2011

Как видно из заголовка, я получаю исключение FileNotFoundException при запуске веб-страницы (проект ASP.NET MVC 2), которая ссылается на библиотеку классов Silverlight. Когда вызывается метод одного из классов из библиотеки Silverlight, я получаю следующую ошибку:

Не удалось загрузить файл или сборку 'System.Xml.Linq, версия = 2.0.5.0, культура = нейтральная, PublicKeyToken = 31bf3856ad364e35' или одна из ее зависимостей. Система не может найти указанный файл.

Хорошо, немного пояснений по поводу моей настройки. У меня есть три проекта; одна - это библиотека классов Silverlight (использующая Silverlight 4), а другая - веб-проект ASP.NET MVC 2 и проект Silverlight, имеющий элемент управления Silverlight, размещенный в веб-проекте. Я ссылался на библиотеку Silverlight в веб-проекте и проекте Silverlight (с элементом управления). Внутри элемента управления SL я создаю экземпляр класса из библиотеки SL и вызываю один из методов класса. Этот метод содержит обращения к классам библиотеки System.Xml.Linq. FileNotFoundException возникает при вызове этого метода, но не при создании экземпляра класса.

Из-за характера этого проекта я не могу вложить какой-либо код, который я использую, но вот некоторый произвольный код, чтобы проиллюстрировать вышеприведенное объяснение:

Класс в библиотеке Silverlight

public class XmlClass
{
    public void Execute()
    {
        // Calls to System.Xml.Linq classes
    }
}

Управление Silverlight

public class SLControl : UserControl
{
    // ...

    private void SomeObject_SomeEvent(object sender, EventArgs e)
    {
        // Instantiate class
        XmlClass xmlClass = new XmlClass();

        // Execute
        xmlClass.Execute();           // <-- Error occurs here.
    }
}

Теперь еще более странная вещь; У меня была эта ошибка в другой точке проекта. В этом другом у меня была стандартная библиотека классов .NET, ссылающаяся на библиотеку SL и использующая те же вызовы, что и элемент управления SL. Я обнаружил ошибку в том же месте и выяснил, что при запуске кода он пытался найти в GAC соответствующую сборку System.Xml.Linq. Поэтому я установил его в GAC, и это устранило мою проблему.

Итак, я немного растерялся, поскольку сборка все еще находится в GAC, и проект, в котором изначально возникла проблема, все еще работает.

Есть идеи по этому поводу?

Ответы [ 2 ]

2 голосов
/ 20 февраля 2011

.NET Framework и среда выполнения для Silverlight - это подмножество полной .NET Framework.Вот почему существует отдельный шаблон проекта, называемый библиотекой классов Silverlight, предназначенный для версии .NET Framework для Silverlight.Сборки Silverlight, такие как библиотека классов Silverlight, не могут использоваться другими проектами .NET, такими как ваши приложения ASP.NET MVC, предназначенные для полной платформы .NET.Сборки Silverlight не переносимы.Это проблема, с которой вы сталкиваетесь.

Предпринимаются попытки повысить переносимость сборок Silverlight, чтобы их можно было использовать совместно с другими приложениями .NET.Подробнее об этом можно прочитать в Совместное использование сборок Silverlight с .NET Apps .Если вы ограничите сборки, на которые вы ссылаетесь в своей библиотеке классов Silverlight, теми базовыми, которые перечислены как переносимые и двоичные, совместимые в посте блога, то вы сможете использовать проект библиотеки классов Silverlight в приложении ASP.NET MVC.

0 голосов
/ 20 февраля 2011

Благодаря сообщению Мехмета Араса, мне удалось найти решение моей проблемы.

По сути, проблема, похоже, возникла в результате ссылки на сборку System.Xml.Linq.различаются как для элементов управления Silverlight, так и для библиотек классов Silverlight.Когда проекты Silverlight были созданы, они содержали ссылку на сборку, которая была найдена в «C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \».Однако некоторые, когда во время изменения ссылок для первоначального исправления проблемы я заканчивал тем, что ссылался на ту же сборку, но находился в "C: \ Program Files (x86) \ Microsoft SDKs \ Silverlight \ v4.0 \ Libraries \ Client \».Когда я сделал это снова для проекта по ошибке, это решило проблему.

Итак, я предполагаю, что я только что ссылался на разные сборки.Это также привело меня к мысли, что сборка, на которую ссылаются при создании проекта, не подходит для использования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...