Сборка System.XML.Linq: тип «System.Xml.Linq.XDocument» определен в сборке, на которую нет ссылок - PullRequest
0 голосов
/ 28 декабря 2010

У меня странная ошибка в моем проекте:

Error   1   The type 'System.Xml.Linq.XDocument' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Xml.Linq, Version=2.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.

НО я добавил ссылку на сборку "System.Xml.Linq".Также у меня это есть в разделе «использование».

Пример кода:

using System;
using System.Collections.Generic;
using System.Xml.Linq;

//...........

APIConnection VK;

public override Collection MakeCollection(
        CollectionRequestContext context)
    {

//............
        Dictionary<string, string> q = new Dictionary<string,string>();
        foreach (string item in context.Query.AllKeys)
        {
            q.Add(item,context.Query.Get(item));
        }

        ///Here I have 3 errors
        VK= new APIConnection("", q, ErrorHandler, true);


        //Error 1: The type 'System.Xml.Linq.XDocument' 
        //is defined in an assembly that is not referenced. 
        //You must add a reference to assembly 'System.Xml.Linq...
        // 
        //Error 2: The best overloaded method match for 
        //'APIConnection.APIConnection(string, 
        // System.Collections.Generic.Dictionary<string,string>,
        // ApiCallBackHandler<System.Xml.Linq.XDocument>, bool)' 
        //has some invalid arguments
        //
        //Error 3: Argument 3: cannot convert from 'method group' to 
        //'ApiCallBackHandler<System.Xml.Linq.XDocument>'   

//............
    }


    void ErrorHandler(XDocument result)
    {
        if (result == null)
        {
            throw new Exception("Something wrong...");
        }
    }

На всякий случай: 1. У меня похожий проект с точно такой же частью кода, и он работает!2. Проект с ошибкой - это WebProject, а проект, который работает, это библиотека классов Silverlight

Почему у меня эта ошибка?

UPD

Конструктор APIConnection:

public APIConnection(string secret, Dictionary<string,string> query, ApiCallBackHandler<XDocument> errorCalback, bool testmode=false)
    {
        startInfo = new StartInfo();

        if (query != null)
        {
            string tmp;
            bool isRequiredSet = true;
            isRequiredSet = query.TryGetValue("api_url", out startInfo.api_url) || isRequiredSet;
            isRequiredSet = query.TryGetValue("api_id", out startInfo.api_id) || isRequiredSet;
            isRequiredSet = query.TryGetValue("api_settings", out startInfo.api_settings) || isRequiredSet;
            if (!isRequiredSet)
                throw new ArgumentNullException("Missing required values.");

        }

        startInfo.server_secret = secret;

        dataProvider = new DataProvider(startInfo,errorCalback);
    }

И конструктор DataProviders:

    public DataProvider(StartInfo info, Delegate globalErrorCallback=null)
    {
        startInfo = info;
        _globalErrorCallback = globalErrorCallback;
    }

1 Ответ

2 голосов
/ 28 декабря 2010

Код находится в отдельной библиотеке Silverlight, на которую ссылается сборка приложения? Если это так, убедитесь, что ваша сборка приложения (основной проект Silverlight) также имеет ссылку на сборку System.Xml.Linq; ссылки на сборки автоматически не каскадируются.

Обновление:

Кажется, я пропустил суть проблемы раньше. Похоже, вы хотите сослаться на сборку Silverlight (библиотеку классов) в сборке, отличной от Silverlight (веб-проект). Это поддерживается, но только для подмножества основных сборок Silverlight. System.Xml.Linq не является одной из тех базовых библиотек, на которые может ссылаться .NET.

Когда я сталкивался с ограничениями ссылок на сборки между Silverlight и .NET, я решил использовать совместное использование кода через связанные файлы, а не ссылки на сборки. Здесь вы компилируете один и тот же код в две разные сборки. Вот статья кто-то написал, объясняющий технику.

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