Недавно столкнулся с такой вот проблемой: есть контролы в отдельной ассембле, есть сателитные ассембли с локализированными версиями ресурсов для контролов, и то и другое лежит в GAC.
Есть проэкт в котором используется контрол из вышеупомянутой ассембли, и потому есть референс на ассемблю с контролом (естественно на GAC, соответственно в референсе есть только название ассембли - никаких путей).
Нужно задеплоить программу через ClickOnce.
И вот сама проблема: при деплойменте сателитные ассембли студия не находит, и потому не деплоит. Если добавить локализированные ресурсы в референсы, то ассемблю деплоймент положит не в папку с нужным языком, а просто рядом с программой, что собственно проблему не решит.
Но решение было найдено :)
Оказывается студия начинает понимать факт того что у ассембли могут быть сателитные ассембли только в том случае если она как-то найдёт данную ассемблю на диске. Можно конечно сделать референс тупо на файл , но это в данном случае не подходит - нужен именно GAC.
И вот для того, чтобы студия могла найти ассемблю на диске и заодно найти её сателитную ассемблю в папке рядом, нужно эту ассемблю и её сателиты, кроме того что в гак запихнуть, положить в какую-то не путающуюся под ногами/руками папка и сказать студии искать там ассембли перед тем как искать их в GAC. Для этого нужно в реестре создать ключ с произвольным названием в ключе HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\AssemblyFolders, и в его дефолтовом значении проставить путь на папку с ассемблями.
Кстати такие дефствия приводят к тому что ассембля появляется в списке сборок в Add Reference диалоге в студии.
После таких действий студия начинает понимать что сателитные ассембли таки существуют и разрешит их задеплоить через ClickOnce.
Надеюсь это кому-то поможет :)
Currently rated 5,0 by 1 people
- Currently 5/5 Stars.
- 1
- 2
- 3
- 4
- 5
Tags: clickonce, gac, deployment, satelite assemblies
Categories: .NET | General
Actions:
Permalink |
Comments (0) |
RSS