Невозможно использовать dll в проектах, отличных от wpf application - PullRequest
0 голосов
/ 17 января 2012

Это действительно странно. Если я запускаю это в приложении wpf:

SKYPE4COMLib.Skype mySkype = new SKYPE4COMLib.Skype();

Я не получаю ошибок.

Я хочу запустить это в приложении asp.net. когда я запускаю его там, я получаю: enter image description here

обратите внимание, что я не получаю никаких ошибок сборки, и ошибка возникает во время выполнения. Класс SKYPE4COMLib.Skype предоставляется Skype и может быть загружен с здесь . Я не понимаю, почему я могу создать экземпляр объекта из этого класса, только если я использую приложение wpf.

Вещи, которые я пробовал: (напомним, я хочу использовать эту библиотеку из моего приложения asp.net)

1) Добавление приложения wpf в мое решение. Затем ссылка на этот проект из моего приложения asp. Я получаю ту же ошибку.

2) Попытка создать веб-сервис и создать экземпляр класса в веб-сервисе. Это не сработает.

3) Измените целевой фреймворк с .Net Framewrok 4 Client Profile на другие. Это решило проблему, я смог создать экземпляр класса, но затем я не смог вызвать методы.

Мне трудно понять, почему я могу создать экземпляр объекта из класса, если я нахожусь в приложении wpf, но не в приложении .net или даже в консольном приложении! Мне кажется, что если скайп пытается заблокировать это нарочно.

Ответы [ 2 ]

0 голосов
/ 17 января 2012

После долгих часов попыток я решил, где сделать wpf-приложение консольным приложением, добавив необходимые ссылки и классы. Затем я сравнил и заметил, что если я добавлю:

[System.STAThreadAttribute()]

к основному методу это работает !!!!!

в результате мой основной метод теперь должен выглядеть так:

с использованием Системы; using System.Collections.Generic; использование System.Linq; используя System.Text;

namespace ConsoleApplication3
{

    class Program
    {
        [System.STAThreadAttribute()]                
        static void Main(string[] args)
        {
            SKYPE4COMLib.Skype oSkype = new SKYPE4COMLib.Skype();
        }
    }
}

на asp.net нет основного метода. ну не тот, о котором я знаю. поэтому в asp.net мне пришлось добавить атрибут AspCompat, равный true.

так что мои asp.net-страницы asp.net теперь выглядят так:

    <%@ Page AspCompat="true" Language="C#" .... etc
0 голосов
/ 17 января 2012

Может быть, у учетной записи пользователя, в которой работает ваш веб-сервис (aspnet), недостаточно прав для этого?Взгляните здесь и посмотрите, работает ли олицетворение для вас.

...