我們有一種訪問網絡共享的方法。這種方法直接調用時可以正常工作,但當通過反射調用它時會得到一個System.IO.IOException。看起來用戶上下文對反射代碼不可用(請參閱下面的堆棧跟蹤)。有沒有辦法來防止這種情況?在反映的方法調用中訪問網絡共享
System.Reflection.TargetInvocationException: Exception has been thrown by
the target of an invocation. ---> System.IO.IOException: Logon failure:
unknown user name or bad password.
at System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath)
at System.IO.Directory.InternalGetFileDirectoryNames(String path,
String userPathOriginal, String searchPattern, Boolean includeFiles,
Boolean includeDirs, SearchOption searchOption)
at System.IO.Directory.GetDirectories(String path, String searchPattern,
SearchOption searchOption)
這個作品
Library.Class obj =new Library.Class();
obj.Execute(serverPath);
這不起作用
Assembly assembly = Assembly.LoadFile(@"pathTo\Library.dll");
Type type = assembly.GetType("Library.Class");
MethodInfo executeMethod = type.GetMethod("Execute");
object classInstance = Activator.CreateInstance(type, null);
object[] parameterArray = new object[] { serverPath};
executeMethod.Invoke(classInstance, parameterArray);
凡Library.Class.execute被定義爲
public void Execute(string serverPath){
string[] directories = Directory.GetDirectories(serverPath,
"1.*", SearchOption.TopDirectoryOnly);
foreach (var directory in directories) {
Console.WriteLine(directory);
}
}
和serverPath
是一種網絡共享requi紅色用戶輸入憑據。
----- 更新1 -------
這似乎是有些環境 - 我至少有一個試驗機在那裏一切正常。我會做更多的測試,以確定哪些差異很重要。
'LoadFrom'(而不是'LoadFile')的行爲有什麼不同嗎? –
http://msdn.microsoft.com/en-us/library/b61s44e8.aspx LoadFile不會將文件加載到LoadFrom上下文中,並且不會使用加載路徑解析依賴關係,因爲LoadFrom方法的作用是' –
有用的信息,但我不認爲這個問題與'LoadFrom'和'LoadFile'有關,因爲在實際的代碼中,Library.dll和執行的應用程序在同一個文件夾中。而且,這個問題今天神祕地停止了。 –