C#应用程序无法';无法在本地找到DLL

C#应用程序无法';无法在本地找到DLL,c#,dll,path,environment-variables,C#,Dll,Path,Environment Variables,我有一个32位的应用程序,它使用其他人构建的DLL,我们称之为xyz.DLL。此DLL依赖于少数其他旧DLL。所有DLL都保存在我的应用所在的同一文件夹中。我的应用程序编译正常,但在运行时,它抛出错误“无法加载文件或程序集”xyz.dll或其依赖项之一。不是有效的Win32应用程序” 我有两个变通办法似乎可以解决这个问题。在第一个示例中,我将DLL移动到一个单独的文件夹,并创建了一个批处理文件来运行应用程序。批处理文件首先将DLL的路径添加到环境中,然后调用应用程序。有趣的是,如果我将DLL与应

我有一个32位的应用程序,它使用其他人构建的DLL,我们称之为xyz.DLL。此DLL依赖于少数其他旧DLL。所有DLL都保存在我的应用所在的同一文件夹中。我的应用程序编译正常,但在运行时,它抛出错误“无法加载文件或程序集”xyz.dll或其依赖项之一。不是有效的Win32应用程序”

我有两个变通办法似乎可以解决这个问题。在第一个示例中,我将DLL移动到一个单独的文件夹,并创建了一个批处理文件来运行应用程序。批处理文件首先将DLL的路径添加到环境中,然后调用应用程序。有趣的是,如果我将DLL与应用程序放在同一个文件夹中,并将其添加到路径中,它将无法工作


第二种方法还将DLL移动到文件夹中,并将此路径添加到用户环境变量中,然后直接运行exe。这些解决方案中的任何一个都需要额外的步骤,这对于应用程序部署来说都不理想。我想知道是否有更好的方法?

当您的dll与应用程序位于同一文件夹中时,应用程序尝试加载的正是该dll,而正如您所说,加载失败

当您将dll移动到另一个文件夹并将该文件夹的路径名添加到PATH环境变量时,应用程序将工作。在这种情况下,应用程序不会尝试加载已移动到其他文件夹的dll。如果是这样,它将失败。它必须正在加载另一版本的dll,该dll位于PATH环境变量中的某个文件夹路径中


只需使用Windows search在计算机上查找dll文件的所有副本。您将能够确定其他dll的位置。

“不是有效的Win32应用程序”强烈建议您的应用程序试图从错误的文件夹加载错误的dll。坐下来看看发生了什么事。