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

在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错综复杂?

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

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

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

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