来自一个应用程序的编译dll在其他应用程序中不起作用

时间:2013-05-26 07:20:40

标签: c# dll

我有两个应用程序。它们共享共同的功能和插件。为了兼容,两者都使用相同的命名空间结构。应用程序将插件加载为cs并将它们编译为dll。

与两个应用程序中的cs相同的插件 - 从源加载并编译为dll。在下一次运行时,应用程序仅加载dll文件。

我想允许仅在没有源代码的情况下将插件分发为dll。问题是,如果从第一个应用程序编译dll,则无法从第二个应用程序加载它。

在下图中,我分别从每个应用程序编译了“Adaptable MACD”。

Comparing Manifests 当我尝试从第二个应用程序加载第一个时,我收到以下错误消息:

无法加载一个或多个请求的类型。请检索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编译形成其中一个应用程序才能在另一个应用程序中运行?

0 个答案:

没有答案