Ответ 1
Я написал текущую версию MvcScaffolding, которую вы упомянули в своем вопросе. Здесь, как он добавляет командлеты PowerShell в консоль диспетчера пакетов:
- Командлеты написаны на С# и скомпилированы в сборку .NET(см. http://msdn.microsoft.com/en-us/magazine/cc163293.aspx)
- Сборка .NET включена в папку "tools" MvcScaffolding (см. http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#From_a_convention_based_working_directory)
- MvcScaffolding также содержит файл init.ps1, который NuGet запускает каждый раз, когда вы открываете содержащее его решение (также описано в http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package#Automatically_Running_PowerShell_Scripts_During_Package_Installation_and_Removal). Этот script использует команду "Import-Module" PowerShell для импорта командлетов из сборки .NET, что делает их доступными в консоли.
Обратите внимание, что на самом деле не нужно писать командлеты в С# и вызывать Import-Module. Более простая альтернатива - записать их в PowerShell (см. http://technet.microsoft.com/en-us/magazine/ff677563.aspx) и определить их inline в вашем файле init.ps1 пакета NuGet.
Или, если ваш вопрос о том, как добавить пользовательские леса в MvcScaffolding (например, вы можете сказать "Scaffold MyCustomThing -somecustomparams" ), затем используйте команду "Scaffold CustomScaffolder MyCustomThing", а затем отредактируйте файлы PS1/T4 которые отображаются в папке CodeTemplates/Scaffolders. Я буду более подробно рассказывать об этом в ближайшее время.