«System.ComponentModel.Win32Exception: операция завершилась успешно» во время отладки модульного теста

Вы можете создать экземпляр в новом AppDomain и выполнить свой код в этом экземпляре.

var settings = new AppDomainSetup
{
    ApplicationBase = AppDomain.CurrentDomain.BaseDirectory,
};
var childDomain = AppDomain.CreateDomain(Guid.NewGuid().ToString(), null, settings);

 var handle = Activator.CreateInstance(childDomain,
            typeof(ReferenceLoader).Assembly.FullName,
            typeof(ReferenceLoader).FullName,
            false, BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance, null, null, CultureInfo.CurrentCulture, new object[0]);


var loader = (ReferenceLoader)handle.Unwrap();

//This operation is executed in the new AppDomain
var paths = loader.LoadReferences(assemblyPath);


AppDomain.Unload(childDomain);

Вот ReferenceLoader

public class ReferenceLoader : MarshalByRefObject
{
    public string[] LoadReferences(string assemblyPath)
    {
        var assembly = Assembly.ReflectionOnlyLoadFrom(assemblyPath);
        var paths = assembly.GetReferencedAssemblies().Select(x => x.FullName).ToArray();
        return paths;
    }
}
4
задан DIlshod 22 March 2019 в 01:58
поделиться

1 ответ

Поместите блок try catch вокруг теста.

[TestMethod]
  public void TestMethod1()
  {
     try
     {
         Class1 class1 = new Class1();
         class1 = null;
         // force Garbage Collection for finalizer to run
         GC.Collect();
     }

     catch(Win32Exception w) 
     {
         Console.WriteLine(w.Message);
         Console.WriteLine(w.ErrorCode.ToString());
         Console.WriteLine(w.NativeErrorCode.ToString());
         Console.WriteLine(w.StackTrace);
         Console.WriteLine(w.Source);
         Exception e=w.GetBaseException();
         Console.WriteLine(e.Message);
     }
  }

Это даст вам точное сообщение об ошибке.


Это может быть что-то столь же простое, как не заданный путь Если это так. Возвращенная ошибка будет file not found. В этом случае это можно решить, изменив "cmd.exe" на @"C:\windows\system32\cmd.exe"

0
ответ дан Strom 22 March 2019 в 01:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: