Удаление имени неймспейса из имен ресурсов при сборке в Visual Studio 2005
Хоть и обещался я не писать о работе в блоге, но не могу не поделиться небольшим решением немаленькой проблемы, которое посчастливилость мне найти. А так как на статью заметка не тянет, то опишу решение здесь.
Довелось мне недавно ковыряться в сборке ASP.NET Ajax. И хоть сей программный продукт и числится как продукт с открытым исходным кодом, но из того, что можно скачать отсюда сборку сделать все равно не выйдет. Так что остался старый дедовский метод с помощью рефлектора все стянуть, подправить и затем опять скомпилить, И все вроде неплохо получилось – проект создался, в студии открылся, поправки сделались и компиляция прошла успешно, но работать получившаяся сборка отказалась напрочь. «Мотор был похож на настоящий, но не работал»
. Ошибка доступа к ресурсам при любой попытке обращения.
Так как переписывать все ссылки на сборки мне лично не улыбалось, то пришлось искать другие пути. Помянув в очередной раз незлым тихим словом M$ я полез в дебри памяти вспоминать какая же гадость связана с компиляцией embedded ресурсов в .NET 2 сборки. И вспомнил – при компиляции к имени ресурса добавляется неймспейс по умолчанию сборки. Т.е. ресурс с именем MicrosoftAjax.js чудесным образом в сборке превращался в System.Web.Extensions. MicrosoftAjax.js. При этом, как известно, ставить пустое имя для корневого неймспейся сборки не позволяет сама студия – посему стандартными средствами сию беду можно было бы разрешить только ручной компиляцией.
Но программеры – люди ленивые, и набирать сверхдлинную команду csc со всеми референсами да ресурсами им влом. Поэтому я сразу пошел искать обходные пути, которые привели меня к MSBuild, в числе прочих своих умений знающему что такое файлы csproj и как с их помощью компилировать сборки. Так что дело теперь осталось за малым – открыть файл проекта в нотепаде, убрать значение из тега <RootNamespace>, сохранить файл проекта и скомпилировать сборку с помощью MSBuild. И чудо – ресурсы сразу приняли необходимый мне изначальный вид и сборка заработала, как живая 
ЗЫ. Все мои действия с библиотекой Microsoft ASP.NET Ajax производились только в целях самообразования и тестирования. Декомпиляция сборки использовалась сугубо для последующей проверки работоспособности моих исправлений в открытом коде библиотеки.