Однако здесь - моя попытка с использованием ILookup
и внутренней KeyedCollection
. Убедитесь, что свойство key неизменно. Cross здесь .
public class Lookup : Collection, ILookup
{
public Lookup(Func keyForItem)
: base((IList)new Collection(keyForItem))
{
}
new Collection Items => (Collection)base.Items;
public IEnumerable this[TKey key] => Items[key];
public bool Contains(TKey key) => Items.Contains(key);
IEnumerator>
IEnumerable>.GetEnumerator() => Items.GetEnumerator();
class Collection : KeyedCollection
{
Func KeyForItem { get; }
public Collection(Func keyForItem) => KeyForItem = keyForItem;
protected override TKey GetKeyForItem(Grouping item) => item.Key;
public void Add(TElement item)
{
var key = KeyForItem(item);
if (Dictionary != null && Dictionary.TryGetValue(key, out var collection))
collection.Add(item);
else
Add(new Grouping(key) { item });
}
public bool Remove(TElement item)
{
var key = KeyForItem(item);
if (Dictionary != null && Dictionary.TryGetValue(key, out var collection)
&& collection.Remove(item))
{
if (collection.Count == 0)
Remove(key);
return true;
}
return false;
}
}
class Grouping : Collection, IGrouping
{
public Grouping(TKey key) => Key = key;
public TKey Key { get; }
}
}
Вот как это работало для меня:
Удаленный компьютер: Microsoft Virtual PC, "IHS\RDM", прикрепленный к моему корпоративному домену, входил в систему как jdoe, учетная запись администратора.
Локальный компьютер: Прикреплен к локальному домену, вошел под именем jdoe, учетная запись администратора.
1) удаленный компьютер: установите rdbgsetup.exe (из Visual Studio 2005\Disk 2\Remote Debugger\x86)
2) удаленный компьютер: RUNAS /user MYDOMAIN\jdoe /netonly msvsmon
3) Удаленный компьютер: msvsmon->Tools->permissions add user "MYDOMAIN\jdoe" (я должен делать это каждый раз при перезапуске)
4) локальный компьютер: запустить msvsmon.
5) локальный компьютер, msvsmon->Tools->permissions, добавлять типы объектов: "компьютеры", "IHS\RDM"
6) локальный компьютер, vs2005->debug->tach to process. Транспорт: По умолчанию, Qualifier: jdoe@RDM
7). Обновитесь, и вуаля; список процессов!
Проблема, которую я имел, состоит в том, что у меня было 2 пользователя:
mydomain\user1
mytestmachine\user1
, который не корректен (по словам Gregg Miskely) я должен был определить локального пользователя в своем компьютере разработчика, например:
mydevcomputer\debug
mytestmachine\debug
с тем же паролем и выполненный VS2008 и Отладчик с этим пользователем:
Gregg Miskely имеет сообщение в блоге на том, почему сервисная учетная запись должна иметь административные привилегии (при установке тот путь). Одна из точек - то, что учетная запись пользователя, в Вашем случае пользователь на Тестовой машине, должна иметь полномочия для соединения назад с другим компьютером. Это кажется на удар случая, где учетная запись mydomain\user1 имеет недостаточные полномочия соединиться с компьютером разработчика.
, Если это не помогает сообщениям в блоге Gregg просматривания, отправляя ему, почта могла бы помочь.
TESTCOMPUTER\user1
имеет тот же пароль как mydomain\user1
?
можно также попытаться работать msvsmon.exe
на целевом компьютере вместо Удаленной Отладки Сервиса. Можно использовать "Выполненный Как..." для выполнения его под различными учетными данными. После того как Вы получаете вещи, работающие с msvsmon,exe
, необходимо смочь установить (или повторно включить) Удаленный Сервис Отладчика, выполняющий его под теми учетными данными.
РЕДАКТИРОВАНИЕ:
необходимо смочь использовать страницу свойств Полномочий в msvsmon.exe
для установки соответствующих полномочий отладки для пользователя домена на целевой машине:
Итак, вы разработчик, и у одного из ваших пользователей возникло исключение, и вы хотите отладить его удаленно, не закрывая окно исключения, но они вошли в систему под другой учетной записью. Оказывается, вы можете отлаживать их приложение, но это становится непросто.
0) Вам по-прежнему нужны соответствующие локальные учетные записи как на удаленном компьютере приложения, так и на локальной машине Visual Studio, что означает добавление учетной записи на компьютер пользователя.
1) Вам необходимо использовать runas с параметром / netonly. Откройте командную строку для папки, в которой находится msvsmon, и введите
runas /user:[user] /netonly msvsmon
. Это заставит msvsmon использовать учетные данные пользователя только при доступе к сети (например, когда msvsmon подключается обратно к локальной машине VS). msvsmon расстроится, если вы вызовете его с помощью runas без использования / netonly.
Таким образом, я не могу отвечать без учетной записи, и я могу отвечать только на свои собственные комментарии, но моя зарегистрированная учетная запись отделена от анонимной учетной записи, из которой я отправил сообщение, поэтому это должен быть «новый ответ». Извините.
багет - когда я делал эту работу ранее сегодня, я создал локальную учетную запись как на ПК Remote Debug Monitor, так и на ПК с Visual Studio. RDM не был в домене, VS был. Обе локальные учетные записи являются администратором с учетными данными, идентичными моей учетной записи домена. Из другой учетной записи (также администратора) я вызвал runas из командной строки с повышенными правами с переключателем netonly. Вам может потребоваться указать имя пользователя, а может и не потребоваться, но поскольку все пароли должны совпадать, я не думаю, что это имеет большое значение.
Дон ' Не забудьте настроить свои разрешения в RDM, чтобы позволить учетной записи пользователя, на которой запущен VS, подключаться с правами отладки. Это довольно разборчиво в отношении того, кого он позволяет добавлять в список, поэтому, если вы сначала не создадите локальную учетную запись, вы сильно расстроитесь. И если вы запускаете RDM под другим именем учетной записи пользователя, вы должны использовать полное имя сервера при попытке подключения к удаленному компьютеру; если вы запускаете и RDM, и VS из одной и той же учетной записи, вы можете обойтись только именем компьютера.