在Visual Studio 2008中,我添加了WinScp.dll(在项目根目录中)作为参考,并立即有一个黄色图标。在编译时:
经过一个小时的挫折,我发现如果我将WinSCP.exe作为项目文件(也在项目根目录中)删除,一切都编译得很好。 古怪!!!!
问题是我的输出目录中需要WinSCP.dll和WinSCP.exe。我该怎么办?
编辑:我了解有一些解决方法,例如重命名文件或更改路径。我最初改名为exe;现在我重命名dll(感谢@Michael)因为它不需要我在我的代码中指定重命名的exe。
但为什么首先出现问题? WinSCP.dll和WinSCP.exe是两个不同的文件。这是Visual Studio中的错误,还是我不理解的dll / exe的复杂性?
答案 0 :(得分:7)
WinSCP.dll和WinSCP.exe是两个不同的文件
不是程序集加载器,它不注意文件扩展名。它只知道它需要找到一个显示名称为“winscp”的程序集。搜索匹配时,它首先尝试使用该名称的EXE文件,然后尝试DLL文件。您可以使用Fuslogvw.exe实用程序查看的内容。显示名称在此blog post中由处理Fusion组件的Microsoft人员描述:
“名称”部分通常是程序集的文件名,不包括扩展名。所以对于程序集foo.dll,“name”部分是“foo”。当然,由于我说“通常”,有时“名称”部分与文件名不同,不包括扩展名。我会稍微讨论一下。
重点补充。所以它首先找到WinSCP.exe,这是一个kaboom,它不是一个有效的.NET程序集。简单的解决方法是重命名 DLL,它会更改程序集的显示名称。