【发布时间】:2011-11-18 16:05:06
【问题描述】:
我遇到了一个相当有趣的问题。
我创建了一个脚本来压缩和上传(带简历)一些文件到 FTP 帐户。在我的机器上本地运行良好,但在生产环境中出现此错误:
PS> $ftp.Put($fileStream,$file.name,$true);
使用“3”参数调用“Put”的异常:“找不到文件 'C:\ByAndrew\PowerShell\Transactions\System.IO.FileStream'。”
在 line:1 char:9
- $ftp.Put(
这是脚本:
$xml = New-Object XML
$xml.Load(".\settings.xml")
[void][Reflection.Assembly]::LoadFrom("D:\Work\Projects\ProjectIndyFTP\Bin\Indy.Sockets.dll")
$ftp = new-object Indy.Sockets.FTP
$ftp.Host = $xml.list.ftp.server
$ftp.Port = $xml.list.ftp.port
$ftp.Username = $xml.list.ftp.user
$ftp.Password = $xml.list.ftp.pass
$ftp.ConnectTimeout = 600
$ftp.Connect()
$file = Get-Item "D:\Work\Projects\ProjectIndyFTP\TestFolder\TestFiles\testfile5M.bin"
#$fileStream = $file.OpenRead()
$fileStream = New-Object System.IO.FileStream($file,[System.IO.FileMode]::Open,[System.IO.FileAccess]::Read,[System.IO.FileShare]::ReadWrite)
$ftp.Put($fileStream,$file.name,$true);
$fileStream.Close()
$ftp.Quit()
exit
最好的问候, 安德鲁
更新:
今天我检查了生产环境中引用的程序集版本: mscoree.dll [2.0.50727.1433] - .net 20 sp1 在本地我有 [2.0.50727.3053] - .net 20 sp2 为了排除这个问题,我查找了一台带有 .net 20 sp1 的机器。重现错误-> 将 .net 更新到 2.0 sp2 并检查它。同样的问题。这就是为什么我说..我不认为“依赖”是错误的。
问候, 安德鲁
【问题讨论】:
-
问题:
Indy.Sockets.dll在您的生产计算机上可用吗?与需要所有组件的本地机器在同一个地方?在本地机器上的C:\ByAndrew\PowerShell\Transactions路径中可以找到什么?Indy.Sockets.dll没有引用任何程序集? -
是的,它可用此路径:"c:\ByAndrew\PowerShell\Transactions\IndyFTP\Indy.Sockets.dll" 不。它与我的本地计算机上的位置不同。我已经从本地计算机复制了文件夹,并将其放置在生产环境中的不同路径中,并调整了设置以匹配新路径。引用的程序集是“mscoree.dll”。我不认为该程序集有问题。我已经测试过了,看起来不错。
标签: powershell upload ftp filestream indy