Я пытаюсь использовать CoreCon API в Visual Studio 2008 для программного запуска эмуляторов устройств. Когда я звоню device.Connect()
, я необъяснимым образом получаю исключение DirectoryNotFoundException. Я получу его, если попробую в PowerShell или в консольном приложении C #. Вот код, который я использую:
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();
}
Кто-нибудь знает, почему я получаю эту ошибку? Я запускаю это на 32-битной WinXP, простой Джейн Visual Studio 2008 Pro. Я предполагаю, что это некоторая проблема конфигурации, так как я не могу сделать это из консольного приложения или PowerShell.
Вот трассировка стека:
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()
Это может быть найдено в <systemdrive>:\Program files\Common Files\Microsoft Shared\CoreCon\1.0\Bin
.
Это путь, по которому вы можете получить эту DLL, поэтому добавьте эту DLL в ваш проект.
Я попробовал это, и это работает нормально. Можете ли вы вставить целое исключение и отследить стек?
Обновлено: странно, я не могу найти эту сборку взаимодействия на моей машине, кроме как в папках c: \ windows \ assembly \ GAC_MSIL.
Почему бы не запустить SysInternals FileMon или Process Monitor, это сэкономит некоторые догадки.
Я подозреваю, что есть проблема с моей сборкой Microsoft.VisualStudio.DeviceConnectivity.Interop. На диске нет такой копии, которую я могу найти. Это только в GAC. Я попытался проверить в Reflector, но для этого нужна также сборка Interop. Поскольку ConManServerClass, очевидно, является COM, может быть, есть библиотека COM, которая должна быть зарегистрирована?
Установка VS 2008 SP 1 исправила это для меня.