gpt4 book ai didi

c# - Visual Studio 添加与 dll 同名的可执行文件

转载 作者:太空狗 更新时间:2023-10-29 20:20:59 29 4
gpt4 key购买 nike

在 Visual Studio 2008 中,我添加了 WinScp.dll(在项目根目录中)作为引用,并且立即出现了一个黄色图标。在编译时:

  • 找不到类型或 namespace 名称“WinSCP”(是否缺少 using 指令或程序集引用?)
  • 已解决的文件图像不正确、没有元数据或无法访问。无法加载文件或程序集“E:...\winscp.exe”或其依赖项之一。该模块应包含程序集 list 。

经过一个小时的挫折,我发现如果我将 WinSCP.exe 作为项目文件(也在项目根目录中)删除,一切都可以正常编译。 奇怪!!!!

问题是我的输出目录中同时需要 WinSCP.dll 和 WinSCP.exe。我该怎么办?

编辑:我知道有变通办法,例如重命名文件或更改路径。我一开始重命名了exe;现在我重命名了 dll(感谢@Michael),因为它不需要我在我的代码中也指定重命名的 exe。

但为什么一开始就有问题呢? WinSCP.dll 和 WinSCP.exe 是两个不同的文件。这是 Visual Studio 中的错误,还是我不理解的 dll/exe 的复杂性?

最佳答案

WinSCP.dll and WinSCP.exe are two different files

不是程序集加载器,它不注意文件扩展名。它所知道的只是它需要找到一个显示名称 为“winscp”的程序集。搜索匹配项时,它首先尝试使用该名称的 EXE 文件,然后是 DLL 文件。您可以使用 Fuslogvw.exe 实用程序看到的内容。 blog post 中描述了显示名称由负责 Fusion 组件的 Microsoft 人员提供:

The "name" part is usually the file name of the assembly, excluding the extension. So for assembly foo.dll, the "name" part is "foo". Of course, since I said "usually", there are times when the "name" part is not the same as the file name excluding extension. I will discuss this in a bit.

添加了强调。所以它首先找到 WinSCP.exe,那是一个 kaboom,它不是有效的 .NET 程序集。简单的解决方法是重命名 DLL,这会更改程序集的显示名称。

关于c# - Visual Studio 添加与 dll 同名的可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14948643/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com