找不到类型或命名空间名称

时间:2010-11-20 09:30:21

标签: c# visual-studio namespaces

我正在开发一个桌面应用程序,我需要加载程序集并在不同的appdomain中执行它。

为了加载我写成的程序集:

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 个答案:

答案 0 :(得分:4)

快速解决方案I: 在项目属性中,将Dotnet框架从2.0,3.0或3.5更改为4,编译并运行!

快速解决方案II: 检查.cs属性 - 从内容更改为编译。

可以找到更多详细信息here

答案 1 :(得分:1)

GetAllPluginNames方法是否与界面IMFDBAnalyserPlugin位于同一namespace下?

如果没有,您需要在包含GetAllPluginNames方法的代码文件的顶部添加using directive,或者使用其命名空间完全限定接口引用,即

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

答案 2 :(得分:1)

这让我感到困惑了一段时间。我添加了引用和代码然后当我尝试编译项目时,它莫名其妙地失去了对引用的了解,同时仍然在解决方案资源管理器中显示它们。

最后,我导航到项目属性并将''Target Framework'字段从'.Net Framework 4 Client Profile'更改为'.Net Framework 4'

这解决了问题。

答案 3 :(得分:0)

尝试typeof(MFDBAnalyser.IMFDBAnalyserPlugin)