Я только что попробовал следующее в linqpad:
System.Web.Security.Membership.GeneratePassword(25, 10)
Вот пароль, который я получил:
[XTJ_67g.i/ag1rL)6_Yv>*+%
Или, если это недостаточно надежно, попробуйте следующее:
System.Web.Security.Membership.GeneratePassword(128, 100)
что дало мне следующее, когда я выполнил это три раза:
|c^.:?m)#q+(]V;}[Z(})/?-;$]+@!|^/8*_9.$&.&!(?=^!Wx?[@%+&-@b;)>N;&+*w[>$2+_$%l;+h+#zhs^{e?&=*(}X_%|:}]]}*X[+)Er%J/-=;Q0{:+=%c7:^$ /:_)hxF+*){2|;(>:*N^+!_&|}B.$})?[V=[+v({-:-@9-Z$j?.[-}(@MHx+}(}Mz_S(7#4}{..>@G|!+++{+C=|_}=+r^@&$0;L*|kz-;$++/N3$=}?;%&]]*/^#^!+ :*{]-x^$g{|?*))_=B@^.#%L;g|+)#[nq}?y(_(m;]S^I$*q=l-[_/?}&-!k^(+[_{Z|&:^%!_)!=p%=)=wYd-#.UP$%s1{*l%+[%?!c+7=@=.;{+M)!^}&d/]{];(&}
это заняло намного меньше секунды, btw. Фреймворк - ваш друг.
См. http://msdn.microsoft.com/en-us/library/system.web.security.membership.generatepassword.aspx
Лучший источник, который я находил и часто читаю, - это сообщения Криса Берроу за последние годы в его блоге .
Также есть официальная документация DLR страница , которая находится за пределами основного сайта DLR .
Я тоже сейчас изучаю этот вопрос, и информации пока не так много. Я не могу помочь с вашим запросом, но ниже я нашел некоторую информацию:
В видеороликах PDC довольно много.
http://channel9.msdn.com/pdc2008/TL44/
http: //channel9.msdn.com/pdc2008/TL10/
В этой статье рассказывается о том, как DLR работает с IronPython: http://msdn.microsoft.com/en-us/magazine/cc163344.aspx
В предварительном просмотре учебного комплекта по адресу http://www.microsoft.com есть очень небольшая сумма. /downloads/details.aspx?FamilyID=752cb725-969b-4732-a383-ed5740f02e93&displayLang=en
Надеюсь, это поможет
Алекс
По умолчанию DynamicObject скажет «возврат к отражению», если ваши функции Try * вернут false. Таким образом, вы уже можете наследовать и добавлять свойства / поля / методы к своему подклассу, которые все будут обрабатываться отражением, если динамический путь не выполняет поиск.
Если углубиться, вы, возможно, захотите взглянуть на IDynamicMetaObjectProvider. На этом более низком уровне способ возврата к отражению - это вызов метода Fallback * для входящего DynamicMetaObjetBinder. Затем это позволяет вызывающему языку предоставить разрешение. Затем вы можете вернуть этот AST или составить его в более крупный AST, который вы возвращаете. В основном Fallback * позволяет вам получить AST, который будет выдавать вызывающий язык, включая правильную ошибку (исключение, undefined в JS и т. Д.).
Способ, которым DynamicObject выполняет возврат к отражению, состоит в том, что он фактически дважды вызывает метод Fallback * связующего объекта. В первый раз он возвращается без параметра errorSuggestion. Это вызывает либо ошибку, либо AST, построенный с использованием отражения. Затем он создает AST, который выглядит примерно так:
if(TryGetMember("name", out value)) {
return value;
} else {
return resultOffallback;
}
Затем он берет этот объединенный AST и фактически передает его в качестве предложения об ошибке для связующего при втором резервном копировании. Связующее должно тогда учитывать это errorSuggestion, если привязка не удалась. Но если присутствует член .NET, errorSuggestion отбрасывается, и привязка .NET имеет приоритет. И, наконец, если язык не знает, было ли связывание успешным (например, в языке есть функция типа «отсутствует метод»), он может снова объединить AST с динамическими проверками.