以下测试用例在.NET 4.0中传递:
var fiT = new FileInfo("myhappyfilename");
Assert.IsNotNull(fiT);
...但在Silverlight 4.0中失败并出现以下错误:
System.ArgumentNullException: Value cannot be null.
Parameter name: format
at System.String.Format(IFormatProvider provider, String format, Object[] args)
at System.Environment.GetResourceString(String key, Object[] values)
at System.IO.FileSecurityState.EnsureState()
at System.IO.FileInfo.Init(String fileName, Boolean checkHost)
at System.IO.FileInfo..ctor(String fileName)
失败是SL 4.0中的错误,或者非失败是.NET 4.0中的错误。有谁知道它是什么?
(为了记录,我在VS 2010 RC上运行SL 4.0,这可能导致了这个问题。)
答案 0 :(得分:0)
由于您通常无法从Silverlight访问文件系统(您需要一个完全受信任的OOB应用程序),看起来SL4正在尝试抛出异常,但是失败了,因为该异常的文本在SL4测试版。一旦SL4被释放,大概你会得到正确的例外。
答案 1 :(得分:0)
有关Siverlight 4的信息,请参阅MSDN documentation for FileInfo:
当被提升信任调用时 应用程序,提供实例方法 用于创建,复制,删除, 移动,打开文件和辅助工具 在创建FileStream对象时。 这个类不能被继承。
您的应用程序无法与elevated trust一起运行。如果你想访问那些受限制的方法,那就需要。
至于为什么它返回null - 可能是一个bug,可能是一个不正确传播的SecurityException。然后,它可能是按照设计 - 文档仍然是预先发布。编辑:gabe的答案在这一点上很可能是正确的。