2010-11-20 4 views
1

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

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

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(); 
    } 
} 

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

ответ

1

Является ли метод GetAllPluginNames находится под тем же namespace как интерфейс IMFDBAnalyserPlugin?

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

if (oType.GetInterface("MFDBAnalyser.IMFDBAnalyserPlugin") == typeof(MFDBAnalyser.IMFDBAnalyserPlugin)) 
+0

он не работает слишком .... – Srivastava

+0

Вам нужно будет предоставить полностью квалифицированную ссылку для 'IMFDBAnalyserPlugin' * каждый раз, когда вы используете ее в своем коде, если вы не захотите добавить директиву' using' в в верхней части вашего файла кода. Я обновил свой пост с полным синтаксисом. –

4

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

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

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

1

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

В конце концов, я вышел в свойствах проекта и изменил Theb поле 'Target Framework' с '.Net Framework 4 Client Profile' до».Net Framework 4'

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