Question

J'essaie d'utiliser l'API CoreCon dans Visual Studio 2008 pour lancer par programme des émulateurs de périphériques.Quand j'appelle device.Connect(), j'obtiens inexplicablement une exception DirectoryNotFoundException.Je l'obtiens si je l'essaye dans PowerShell ou dans l'application console C#.Voici le code que j'utilise :

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();
}

Est-ce que quelqu'un sait pourquoi j'obtiens cette erreur ?Je l'utilise sur WinXP 32 bits, Plain Jane Visual Studio 2008 Pro.J'imagine que c'est un problème de configuration puisque je ne peux pas le faire à partir d'une application console ou de PowerShell.

Voici la trace de la pile :

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()
Était-ce utile?

La solution

On peut le trouver à <systemdrive>:\Program files\Common Files\Microsoft Shared\CoreCon\1.0\Bin.

C'est le chemin où vous pouvez obtenir cette DLL, alors ajoutez cette DLL à votre projet.

Autres conseils

L'installation de VS 2008 SP 1 a résolu le problème pour moi.

Je soupçonne qu'il y a un problème avec mon assembly Microsoft.VisualStudio.DeviceConnectivity.Interop.Je n'en trouve aucune copie sur le disque.C'est uniquement au sein du GAC.J'ai essayé d'inspecter dans Reflector, mais il a également besoin de cet assemblage Interop.Puisque ConManServerClass est évidemment COM, peut-être y a-t-il une bibliothèque COM qui doit être enregistrée ?

J'ai essayé ceci et ça fonctionne bien.Pouvez-vous coller l'intégralité de l'exception et de la trace de la pile ?

Mis à jour: Étrangement, je ne trouve pas cet ensemble d'interopérabilité sur ma machine autrement que dans les dossiers c:\windows\assembly\GAC_MSIL.

Pourquoi ne pas lancer SysInternals FileMon ou Process Monitor, cela éviterait quelques conjectures.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top