我正在开发一个桌面应用程序,我需要加载程序集并在不同的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();
}
}
可能是什么问题? 任何人都可以帮助我!!
答案 0 :(得分:4)
答案 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)