Pregunta

Estoy intentando utilizar la API CoreCon en Visual Studio 2008 para iniciar emuladores de dispositivos mediante programación.cuando llamo device.Connect(), inexplicablemente obtengo una DirectoryNotFoundException.Lo entiendo si lo pruebo en PowerShell o en la aplicación de consola C#.Aquí está el código que estoy usando:

static void Main(string[] args)
{
     DatastoreManager dm = new DatastoreManager(1033);
     Collection<Platform> platforms = dm.GetPlatforms();

     foreach (var p in platforms)
     {
        Console.WriteLine("{0} {1}", p.Name, p.Id);
     }

     Platform platform = platforms[3];
     Console.WriteLine("Selected {0}", platform.Name);

     Device device = platform.GetDevices()[0];
     device.Connect();
     Console.WriteLine("Device Connected");

     SystemInfo info = device.GetSystemInfo();
     Console.WriteLine("System OS Version:{0}.{1}.{2}",info.OSMajor, info.OSMinor, info.OSBuildNo);

     Console.ReadLine();
}

¿Alguien sabe por qué recibo este error?Estoy ejecutando esto en WinXP de 32 bits, simple Jane Visual Studio 2008 Pro.Me imagino que es algún problema de configuración ya que no puedo hacerlo desde una aplicación de consola o PowerShell.

Aquí está el seguimiento de la pila:

System.IO.DirectoryNotFoundException was unhandled

Message="The system cannot find the path specified.\r\n"

Source="Device Connection Manager"

StackTrace:
       at Microsoft.VisualStudio.DeviceConnectivity.Interop.ConManServerClass.ConnectDevice()
       at Microsoft.SmartDevice.Connectivity.Device.Connect()
       at ConsoleApplication1.Program.Main(String[] args) in C:\Documents and Settings\Thomas\Local Settings\Application Data\Temporary Projects\ConsoleApplication1\Program.cs:line 23
       at System.AppDomain._nExecuteAssembly(Assembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
¿Fue útil?

Solución

Se puede encontrar en <systemdrive>:\Program files\Common Files\Microsoft Shared\CoreCon\1.0\Bin.

Esta es la ruta donde puede obtener este dll, así que agréguelo a su proyecto.

Otros consejos

La instalación de VS 2008 SP 1 me lo solucionó.

Sospecho que hay un problema con mi ensamblado Microsoft.VisualStudio.DeviceConnectivity.Interop.No hay ninguna copia de eso en el disco que pueda encontrar.Está solo en el GAC.Intenté inspeccionar en Reflector, pero también necesita ese ensamblaje de Interop.Dado que ConManServerClass es obviamente COM, ¿tal vez haya una biblioteca COM que deba registrarse?

Probé esto y funciona bien.¿Puedes pegar toda la excepción y el seguimiento de la pila?

Actualizado: Curiosamente, no puedo encontrar ese conjunto de interoperabilidad en mi máquina excepto en las carpetas c:\windows\assembly\GAC_MSIL.

¿Por qué no iniciar SysInternals FileMon o Process Monitor? Ahorraría algunas conjeturas.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top