Visual Studio正在添加与dll同名的可执行文件

本文关键字:可执行文件 dll Studio 添加 Visual | 更新日期: 2023-09-27 18:00:06

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

  • 找不到类型或命名空间名称"WinSCP"(是否缺少using指令或程序集引用?)
  • 解析的文件有一个坏图像,没有元数据,或者无法访问。无法加载文件或程序集"E:。。。''"winscp.exe"或其依赖项之一。模块应包含程序集清单

经过一个小时的沮丧,我发现如果我删除WinSCP.exe作为项目文件(也在项目根目录中),一切都会很好奇怪

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

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

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

Visual Studio正在添加与dll同名的可执行文件

WinSCP.dll和WinSCP.exe是两个不同的文件

不注意程序集加载程序,它不注意文件扩展名。它只知道需要找到一个显示名称为"winscp"的程序集。当搜索匹配项时,它首先尝试使用该名称的EXE文件,然后是DLL文件。使用Fusilogvw.exe实用程序可以看到一些内容。在这篇博客文章中,研究Fusion组件的微软人员描述了显示器名称:

"名称"部分通常是程序集的文件名,不包括扩展名。因此,对于程序集foo.dll,"名称"部分是"foo"。当然,由于我说的是"通常",有时"名称"部分与不包括扩展名的文件名不相同。我稍后会讨论这个问题。

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