【问题标题】:Deploying NLog with a ClickOnce application使用 ClickOnce 应用程序部署 NLog
【发布时间】:2009-08-21 20:20:55
【问题描述】:

用户无法安装 ClickOnce 应用程序。错误是:“文件 NLog.dll 不是有效的可移植可执行 (PE) 文件。”它在我的机器上运行良好,但我安装了 nLog。这对于客户端机器是不可能的。任何想法如何让它发挥作用?

【问题讨论】:

    标签: .net clickonce nlog


    【解决方案1】:

    如果使用ClickOnce 安装您的NLog.config 不会被复制到您的程序中,我找到了这个问题的答案。

    您需要使用Solution ExplorerProject 中选择NLog.config 文件,并将其Properties 设置如下:

    • 构建操作:内容
    • 复制到输出目录:始终复制

    现在,当您使用ClickOnce 进行部署时,文件也应该被复制过来! :)

    【讨论】:

      【解决方案2】:

      我将所有 NLog 配置数据放入 App.config 文件而不是 NLog.config 文件中,并且在使用 ClickOnce 部署后它也对我有用。没有错误,日志记录正在部署的应用程序上运行。

      【讨论】:

        【解决方案3】:

        检查您的构建选项并确保 NLog.dll 包含在“应用程序文件”中,以便它位于“下载组”/必需中。

        【讨论】:

        • 这很可能是问题所在,因为 NLog 应该只是您可以包含的另一个 dll。 Log4Net 就是这样工作的。
        • 谢谢,但是 dll 确实被下载了,它只是给出了一个错误。
        【解决方案4】:

        如果您的 NLog 程序集部署到 GAC,那么您不能(简单地)将其包含在 ClickOnce 设置中。尝试将它们部署为本地 DLL。如果这不可行,您将需要单独的安装程序(或 MSI)来部署 NLog。

        【讨论】:

        • 为了进一步 Henk 的回答,nlog 安装应该在您可以使用的某个地方包含一个非 GACed dll,或者您应该能够从他们的站点下载一个(通常是 zip 文件而不是安装程序)。
        • 我们在这里也使用 NLog 没有(太多)问题,但是我们的 dll 是在本地部署的应用程序。
        【解决方案5】:

        将dll添加到您的项目并设置BuildAction = None,并将“复制到输出目录”设置为“不复制”。

        删除项目中对 NLog 的引用。重新添加引用并将其指向您刚刚添加到项目中的 dll。在引用的属性上,将“复制本地”设置为“真”。

        现在当你运行应用程序时,它会指向本地版本,而当你部署应用程序时,它会部署本地版本并指向它。

        这适用于许多第 3 方 DLL,但不是全部。最好的办法就是尝试一下。

        【讨论】:

        • 谢谢,但是 dll 确实被下载了,它只是给出了一个错误。
        • 在你的项目中是如何引用它的?我将不得不挖掘我的记忆,我记得一些关于可移植执行错误的事情......你确实改变了你的项目以按照我在这里所说的方式引用它?
        • 这是来自 MSDN 论坛的帖子——看看这是否对您有帮助:social.msdn.microsoft.com/forums/en-US/winformssetup/thread/…
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多