Обобщенный тип Behavior не поставляется с подсистемой WPF (сборки WindowsBase, PresentationCore и PresentationFramework). Он входит в состав сборки System.Windows.Interactivity, которая является частью продукта Expression Studio.
По поводу двух режимов работы: в данном примере метод IsAdmin вернет true, если пользователь действительно является администратором, на это не говорит о том, что процесс запущен в привилегированном режиме. Чтобы это выяснить, необходимо анализировать токен _TOKEN_INFORMATION_CLASS.TokenElevation текущего процесса. Официальный пример, где используется описанная техника: MSDN: UAC self-elevation (CSUACSelfElevation).
Если ведется разработка desktop-приложения (Microsoft .NET Framework 4.0, Microsoft Visual Studio 2012), то для решения описанной задачи, можно использовать альтернативное решение от компании Microsoft в виде дополнительной библиотеки: описание проекта, пакет NuGet. Минус: дополнительная библиотека (~65KB). Плюс: код использования async/await полностью повторяет таковой для Microsoft .NET Framework 4.5, при переходе на новую версию просто убирается ссылка на библиотеку.
Использовал до релиза версию 2.3 Beta1, после обновления до RTM при подключении к серверу OpenVPN-GUI стала аварийно завершать работу. Как оказалось, проблема появилась в версии 2.3 RC2, а в версии 2.3 RC1 все работает стабильно (Windows 8 x64).
Да, вы полностью правы. Один из минусов использования ILMerge заключается в том, что указанный вами пример отработает некорректно. Однако и это, впринципе, несложно решается. Например, для того чтобы подгрузить из сборки, слепленной утилитой, embedded resource нужно тоже указать правильное имя ресурса, а оно зависит от имени сборки. В обоих случаях имя сборки легко получить, указав вместо статического «Assembly.GetEntryAssembly().GetName().Name», а сам namespace при «склеивании» у типа не меняется.
Более года пользуюсь для этих целей консольной утилитой ILMerge (Microsoft) как для корпоративных, так и для персональных утилит (.NET 2.0-3.5SP1). Механизм работы несколько отличается от описанного — разработка проекта ведётся обычным способом, а потом (например, в релизной конфигурации) все сборки и испольняемый файл «склеиваются» с сохранением пространтсв имен в единый исполняемый файл. Сжатие, соответственно, в этом случае не применяется.
Большое спасибо за обзор. Если будет возможность, расскажите пожалуйста про создания пакета установки с возможностью инсталляции его в нескольких версиях на одной рабочей станции (Installing Multiple Instances of Products and Patches) — уж очень интересная тема, особенно в связке с WiX.
Я сравнивал производительность компиляции с помощью Visual Studio и MSBuild (из поставки Microsoft .NET Framework 3.5 SP1) одного продукта (~200 солюшенов и ~1000 проектов в сумме) — скорость компиляции с помощью MSBuild была более, чем в 1,5 раза быстрее (
к сожалению, реальные цифры привести не могу — не осталось этих данных). Около 25% проектов были с «хитрыми» PostBuild событиями. В итоге сборка проходила успешно, без ошибок. Собранная версия работала так же, как и после сборки с помощью Visual Studio.
Касательно последнего (радикального) способа «Можно просто редактировать файлы в Vim и запускать VS вместо make только для компиляции проекта». Я думаю, в этом случае помогут консольные утилиты msbuild.exe (для проектов C#, входит в состав Microsoft .NET Framework) и vcbuild.exe (для проектов на С++, входит в состав Microsoft SDK), так как запускать Visual Studio для компиляции проекта более накладно. Кстати, при наличии vcbuild.exe msbuild.exe автоматически перенаправит компиляцию для него, если проект будет на C++.
Утилита успешно установлена и протестирована на работоспособность на Windows Vista Business SP2 x86. Параметры среды: учетная запись с правами локального администратора, UAC выключен.
Извините, но упоминая «Virtual Desktop Interface» может быть Вы имели ввиду Virtaul Desktop Infrastructure (VDI), что фактически является обобщенной аббревиатурой модели виртуализации работы с рабочей станцией в Windows 7? Понятие VDI включает в себя использование Remote Desktop, а возможность быть сервером для Remote Desktop есть и в Profession-редакции. В этом случае это является особенностью не только Ultimate-редакции, но и Professional.
Разработка SP1 во время завершения работ над RTM — вполне объяснимое явление, говорящее о том, что ребята усердно трудятся и не тратят время впустую. SP — это набор исправлений и (зачастую) новый функционал. С момента появления Windows 7 Release Candidate все исправления (кроме серъёзных ошибок и очень несущественных) а также доработки вносятся уже в ветку разработки SP1. Пройдет некоторое время после выпуска RTM, и список исправлений будет расширен, а новый функционал — уже протестирован.
IsAdmin
вернетtrue
, если пользователь действительно является администратором, на это не говорит о том, что процесс запущен в привилегированном режиме. Чтобы это выяснить, необходимо анализировать токен_TOKEN_INFORMATION_CLASS.TokenElevation
текущего процесса. Официальный пример, где используется описанная техника: MSDN: UAC self-elevation (CSUACSelfElevation).async/await
полностью повторяет таковой для Microsoft .NET Framework 4.5, при переходе на новую версию просто убирается ссылка на библиотеку.к сожалению, реальные цифры привести не могу — не осталось этих данных). Около 25% проектов были с «хитрыми» PostBuild событиями. В итоге сборка проходила успешно, без ошибок. Собранная версия работала так же, как и после сборки с помощью Visual Studio.