我怎么能在C#中编译一个exe,没有错误,但执行失败,却找不到dll?

我怎么能在C#中编译一个exe,没有错误,但执行失败,却找不到dll?,c#,C#,我已经创建了一个控制台应用程序 我想用命令行编译它 csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs 它创建了exe,但执行时说找不到StringTemplate或依赖项,为什么?我所有的dll包都在同一个目录中 更新:在VisualStudio下构建的程序同样有效,但我需要通过命令行来完成 更新2:即使复制到exe路径,仍然找不到它们 更新3:终于可以工作了。我混淆了visual studio bin输

我已经创建了一个控制台应用程序

我想用命令行编译它

csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs
它创建了exe,但执行时说找不到StringTemplate或依赖项,为什么?我所有的dll包都在同一个目录中

更新:在VisualStudio下构建的程序同样有效,但我需要通过命令行来完成

更新2:即使复制到exe路径,仍然找不到它们


更新3:终于可以工作了。我混淆了visual studio bin输出和我的csc输出目录。

这是因为您没有使用友好的IDE来处理这些细节。因为您是手工操作的,所以由您自己复制DLL

csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs
copy c:\antlr\antlr.runtime.dll .
copy c:\antlr\stringtemplate.dll .

DLL现在位于EXE的“探测路径”中,找到它们不会有任何问题。

这是因为您没有使用友好的IDE来处理这些细节。因为您是手工操作的,所以由您自己复制DLL

csc /r:c\antlr\antlr.runtime.dll;c\antlr\StringTemplate.dll myprog.cs
copy c:\antlr\antlr.runtime.dll .
copy c:\antlr\stringtemplate.dll .

DLL现在位于EXE的“探测路径”中,找到它们不会有任何问题。

可能有很多问题。对我来说,产生这样一个错误的最常见原因——假设所有DLL确实都在它们应该在的位置(在运行的可执行文件旁边)——是您的应用程序正在编译为任何CPU,但您正在x64机器上运行它(因此CLR将其加载为x64)但您引用的其中一个程序集必须与本机代码进行互操作,或以其他方式引用x86(32 but)非托管DLL。由于无法将32位DLL加载到64位进程中,因此程序集加载失败。

可能有很多问题。对我来说,产生这样一个错误的最常见原因——假设所有DLL确实都在它们应该在的位置(在运行的可执行文件旁边)——是您的应用程序正在编译为任何CPU,但您正在x64机器上运行它(因此CLR将其加载为x64)但您引用的其中一个程序集必须与本机代码进行互操作,或以其他方式引用x86(32 but)非托管DLL。由于无法将32位DLL加载到64位进程中,因此程序集加载失败。

DLL必须位于exe的同一目录中,除非它们位于GAC中。

DLL必须位于exe的同一目录中,除非它们位于GAC中。

在PATH env变量上搜索DLL


除非你特别提出;。;在您的路径中,不会搜索CWD。

DLL是在path env变量上搜索的


除非你特别提出;。;在您的路径中,不会搜索CWD。

即使复制到exe路径,也无法找到它们!好的,最后我将它们复制到visual studio bin而不是console exe!好吧,即使复制到exe路径它仍然找不到他们奇怪!好的,最后我将它们复制到visual studio bin而不是console exe!