【问题标题】:workaround needed: notify a user that exe is missing dependencies from within the application?需要解决方法:通知用户 exe 缺少应用程序中的依赖项?
【发布时间】:2011-06-20 03:19:03
【问题描述】:

我编写了一个使用 SharePoint dll 文件的快速控制台应用程序。如果我尝试在没有上述 dll 文件的机器上运行它,应用程序会在打开时立即崩溃。

我绝对是一个新手,但如果应用程序有一种方法可以告诉用户他们在错误的机器上使用它,我会更喜欢它,然后它就会严重崩溃。除了编写第二个应用程序来扫描依赖项之外,还有其他方法可以在相关应用程序之前运行吗?如果我将需要依赖项的代码放在一个单独的类中,直到应用程序检查它是否在正确的计算机上才会实例化,应用程序在打开时是否仍会立即失败?肯定有人想出了解决这种情况的方法。

【问题讨论】:

    标签: c# visual-studio sharepoint dependencies runtime


    【解决方案1】:

    不幸的是,您必须编写一个启动器应用程序 - 如果您考虑一下,主应用程序甚至需要启动所需的 DLL。如果您将扫描嵌入到您的主应用程序中,由于缺少 DLL,它将无法启动。

    您可以使用插件架构来扫描所需的 DLL 并动态加载它们(想到MEF)。

    【讨论】:

    • 所以当我编写第二个应用程序来启动 exe 时,有没有办法将这两个应用程序捆绑在一起,以便用户只需复制粘贴一个项目?还是我必须创建两个 exe,并坚持用户将它们复制到同一个目录。
    • @ep1033 - 它们必须是单独的可执行文件(如果您使用静态链接的 DLL),因为 exe 只能有一个入口点。您始终可以为您的应用程序创建一个捆绑两者的设置。
    • 捆绑,你的意思是像ILMerge?
    • @ep1033 - 否。类似设置项目、MSI 或安装程序。
    【解决方案2】:

    如何将该 dll 的负载包装到:

     try { 
          Assembly.Load(..);
     }
     catch(TypeLoadException ex) {
    
             //Let the user know which type from what dll was not loaded.
     }
    

    您必须在运行时加载该 dll 才能真正做到这一点。

    【讨论】:

    • @ep1033 请检查我的答案是否正确(大绿色复选标记)! :)
    【解决方案3】:

    也许可以将程序集复制到共享点的输出目录。所以参考是在本地进行的。

    【讨论】:

      【解决方案4】:

      如果您的应用程序直接引用 SharePoint dll 或程序集,则无法通知用户,因为如果任何静态链接的所需程序集不可用,.NET CLR 将不会执行您的代码。

      您可以使用 SharePoint 程序集和类型的某种动态加载,以便在启动时应用程序不需要执行该程序集,或者您为您的应用程序创建一个启动器来检查是否一切正常启动您的应用程序,否则会通知用户。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-07-01
        • 2020-08-02
        • 2021-11-14
        • 2022-07-08
        • 2012-03-03
        • 2017-05-14
        • 1970-01-01
        • 2021-01-08
        相关资源
        最近更新 更多