访问反射方法调用中的网络共享



我们有一个访问网络共享的方法。这个方法在直接调用时工作得很好,但是当通过反射调用时,我们会得到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(@"pathToLibrary.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是需要用户输入凭据的网络共享。

, -------

这似乎与环境有关——我至少有一台一切正常的测试机器。我将做更多的测试来确定哪些差异重要。

您可能想尝试以下操作来获取当前目录:

AppDomain.CurrentDomain.BaseDirectory

System.Reflection.Assembly.GetExecutingAssembly () .Location

这似乎是某种侥幸的环境问题。自测试机器重新启动以来,我们一直无法重现该问题。

最新更新