Тип или имя пространства имен не найдены - PullRequest
1 голос
/ 20 ноября 2010

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

Для загрузки сборки я написал:

public static DataTable GetAllPluginNames(string[] args)
{
        SqlConnection sConnection = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);

        //ToDo: create a table of one column - only name of the plugin and return that.
        //ToDo: refer the code from MFAssemblyValidator from MFPluggerService.

        DataTable dt = null;
        List<string> assemblyNames = new List<string>();
        Assembly[] oAssemblies = new Assembly[args.Length];

        for (int assemblyCount = 0; assemblyCount < args.Length; assemblyCount++)
        {
            oAssemblies[assemblyCount] = Assembly.LoadFile(args[assemblyCount]);

            try
            {
                foreach (Type oType in oAssemblies[assemblyCount].GetTypes())
                {
                    // Check whether class is inheriting from IMFDBAnalyserPlugin.
                    if (oType.GetInterface("IMFDBAnalyserPlugin") == typeof(IMFDBAnalyserPlugin))
                    {
                        assemblyNames.Add(args[assemblyCount].Substring(args[assemblyCount].LastIndexOf("\\") + 1));
                    }
                }
                 return dt;
            }
            catch (Exception ex) 
            {
                lblError.Text = "ERROR";
            }


        // Passing data one application domain to another.
        AppDomain.CurrentDomain.SetData("AssemblyNames", assemblyNames.ToArray());
      }
}

, ноtypeof(IMFDBAnalyserPlugin)) показывает ошибку пространства имен.

IMFDBAnalyserPlugin - это класс интерфейса в моей программе:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace MFDBAnalyser
{
    public interface IMFDBAnalyserPlugin
    {
        void ExecutePlugin();
    }
}

В чем может быть проблема ??Кто-нибудь может мне помочь !!

Ответы [ 4 ]

4 голосов
/ 30 декабря 2010

Быстрое решение I: В свойствах проекта измените среду Dotnet с 2.0,3.0 или 3.5 на 4, скомпилируйте и запустите!

Быстрое решение II: проверьте свойства .cs - перейдите от содержимого к компиляции.

Более подробную информацию можно найти здесь .

1 голос
/ 30 января 2013

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

В итоге я перешел к свойствам проекта и изменил поле «Target Framework» с «.Net Framework 4 Client Profile» на «.Net Framework 4»

Это исправило isse.

1 голос
/ 20 ноября 2010

Метод GetAllPluginNames расположен в том же пространстве имен , что и интерфейс IMFDBAnalyserPlugin?

Если нет, то вам нужно либо добавить директиву using в начало файла кода, содержащего метод GetAllPluginNames, либо полностью указать ссылку на интерфейс с его пространством имен, т.е.

if (oType.GetInterface("MFDBAnalyser.IMFDBAnalyserPlugin") == typeof(MFDBAnalyser.IMFDBAnalyserPlugin))
0 голосов
/ 20 ноября 2010

попробуй typeof(MFDBAnalyser.IMFDBAnalyserPlugin)

...