【发布时间】:2013-02-03 14:41:27
【问题描述】:
在 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 是一个 .NET 程序集,但 WinScp.exe 不是?
-
WinSCP .NET Assembly WinSCP.dll 基本上只是一个包装器,它负责使用带有命令行参数的 WinSCP.exe 来创建进程。默认情况下,.dll 在同一目录中查找可执行文件,但可以在调用代码中更改(我当前的解决方法是将 WinSCP.exe 更改为 WinSCP_.exe 并进行适当的更改,但必须有更好的方法)。
-
也许您可以将
WinSCP.exe文件存储在其他位置并使用构建后步骤将其复制到输出目录? -
WinSCP 开发人员建议重命名 DLL 而不是可执行文件:“您可能希望将 winscp.exe 添加到您的 Visual Studio 项目中,以使其自动复制到输出路径(通过设置文件属性生成器操作为 None 并复制到输出目录以复制(如果较新)。请注意,这会使 winscp.dll 和 winscp.exe 发生冲突。您需要重命名 winscp.dll 以赋予其不同的基本名称,例如 winscpnet.dll"。我想这消除了修改 WinSCP.dll 代码的需要?来自winscp.net/eng/docs/library_install
标签: c# visual-studio dll assemblies