我有两个应用程序。它们共享共同的功能和插件。为了兼容,两者都使用相同的命名空间结构。应用程序将插件加载为cs并将它们编译为dll。
与两个应用程序中的cs相同的插件 - 从源加载并编译为dll。在下一次运行时,应用程序仅加载dll文件。
我想允许仅在没有源代码的情况下将插件分发为dll。问题是,如果从第一个应用程序编译dll,则无法从第二个应用程序加载它。
在下图中,我分别从每个应用程序编译了“Adaptable MACD”。
当我尝试从第二个应用程序加载第一个时,我收到以下错误消息:
“无法加载一个或多个请求的类型。请检索LoaderExceptions属性以获取更多信息。”
这是我的代码:
public void LoadDllIndicator(string dllPath, out string errorMessages)
{
errorMessages = string.Empty;
Assembly assembly = Assembly.LoadFrom(dllPath);
try
{
Type[] types = assembly.GetTypes();
foreach (Type type in types)
{
if (!typeof (IIndicator).IsAssignableFrom(type))
continue;
var newIndicator = Activator.CreateInstance(type) as Indicator;
if (newIndicator == null)
{
errorMessages = "Cannot load: " + dllPath;
return;
}
newIndicator.Initialize(SlotTypes.NotDefined);
newIndicator.CustomIndicator = true;
newIndicator.LoaddedFromDll = true;
IntegrateIndicator(dllPath, out errorMessages, newIndicator);
}
}
catch (Exception exception)
{
errorMessages = "ERROR: Loading '" + Path.GetFileName(dllPath) + "': " + exception.Message;
if (exception.InnerException != null && !string.IsNullOrEmpty(exception.InnerException.Message))
errorMessages += " " + exception.InnerException.Message;
}
}
如何使用dll编译形成其中一个应用程序才能在另一个应用程序中运行?