首页 > 解决方案 > 无法加载文件或程序集 'Npgsql, Version=4.0.5.0,culture=neutral...' 或其依赖项之一。仅在任务计划程序中发生

问题描述

我的项目目标是从 Microsoft CRM 获取数据并将其上传到 PostGresSQL DB。当我手动运行可执行文件时,一切正常,但是当我将应用程序作为任务计划程序上的计划任务运行时,出现此错误:

“无法加载文件或程序集 'Npgsql, version=4.0.5.0, Culture=neutral, PublicKeyToken=5d8b90d52f46fda7' 或其依赖项之一。系统找不到指定的文件”。

我尝试将以下内容添加到我的 .csproj 文件中,但仍然没有运气

<PropertyGroup>
  <AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>  
 <GenerateBindingRedirectsOutputType>true</GenerateBindingRedirectsOutputType>
</PropertyGroup>

一切正常,直到它达到下面的功能。它不会进入该功能,因为“打印测试”从未写入控制台。

    public void upToPostgresDB(string queryString)
            {
                Console.WriteLine("Print Test");
    #if DEBUG
    //Credentials below are not actually blank, I just removed them for privacy

                String pgDatabase = "";
                String pgServer = "";
                String pgUser = "";
                String pgPass = "";
    #else
                String pgDatabase = "";
                String pgServer = "";
                String pgUser = "";
                String pgPass = "";
    #endif

                String pgConnectionString = String.Format("Server={0}; UserId={1}; Password={2}; Database={3}", pgServer, pgUser, pgPass,     pgDatabase);
            NpgsqlConnection pgCon = new NpgsqlConnection(pgConnectionString);
            NpgsqlCommand cmd = new NpgsqlCommand(queryString, pgCon);            
            try
            {

                pgCon.Open();
                cmd.ExecuteNonQuery();
                pgCon.Close();
            }
            catch (Exception e)
            {
                string errorMessage = "Failed to upload data to the postgres database.  " + e.Message;
                Console.WriteLine(errorMessage);
                pgCon.Close();
            }
        }

标签: c#npgsqltaskscheduler

解决方案


如果您的 .NET Framework 库将一些非托管代码库用作其依赖模块,则通常会出现此异常。尝试通过这些应用程序扫描您的库以查找依赖项:

http://www.dependencywalker.com/ (对于“遗留”技术和语言,如 C++、OCX、OLE 等;我不确定它现在是否适用于 MS.NET)

https://www.red-gate.com/products/dotnet-development/reflector/ (用于 MS.NET 模块扫描和代码反编译)

那应该指导您解决问题。如果它对您不起作用,请确保您已正确配置应用程序启动路径和搜索程序集的目标路径: https ://docs.microsoft.com/en-us/dotnet/framework/configure-apps/specify -装配位置

最后一件事是使用托管包装程序集将缺少的非托管代码程序集复制到目录中。


推荐阅读