Множество среди в ASP.Net MVC 2

Уча ASP.Net MVC 2, идващ от PHP и малко Rails фон, и едно от нещата, които не ми се струват, е начинът, по който управлявате конфигурационните настройки като низове за свързване или крайни точки за външни услуги.

С PHP рамката, която предишната ми компания използваше, имаше стандартен формат и конвенция за конфигурационните файлове. Моята компания успя да използва това, за да направи така, че да бъде зареден различен конфигурационен файл въз основа на променлива на средата (която беше зададена в конфигурацията на Apache). Това направи много лесно и автоматично променянето на всяка конфигурационна настройка въз основа на средата. Доколкото знам, Rails има вградена някаква версия на тази функционалност.

Запознат съм с файловете app.config и web.config в света .Net, но има ли начин тези промени да се променят въз основа на средата, за предпочитане автоматично и с различни нива на детайлност? Цялата конфигурационна система изглежда много анемична в сравнение с това, с което съм свикнал.

Вероятно бих могъл да хакна нещо заедно, за да постигна това, но исках да видя какъв подход предприемат хората на практика или дали има някакъв стандартен инструмент, който хората използват.


person davidtbernal    schedule 24.11.2010    source източник


Отговори (4)


Бихте могли да опитате нещо подобно: Управление на множество среди на конфигурационен файл със събития преди изграждане

person CGK    schedule 03.12.2010
comment
Това, заедно с решенията, предложени в коментарите, изглежда като най-жизнеспособния маршрут. - person davidtbernal; 08.12.2010
comment
@notJim Използвам го в проект от около година и ми помогна много. Единственият проблем е, че трябва да внимавате да изберете правилната конфигурация, когато разгръщате. Но това е добра стъпка към автоматизиране на процеса на изграждане и внедряване. - person CGK; 09.12.2010

Има web.config трансформации.

Вероятно греша, но изглежда си спомням, че те няма да бъдат приложени, ако човек просто стартира приложението с бутона „Стартиране на отстраняване на грешки (F5)“ във Visual Studio, което прави функцията да изглежда непрактична за много приложения.

person quentin-starin    schedule 24.11.2010
comment
Прав си, не прилага тези трансформации, когато просто изграждаш. Или трябва да го стартирате ръчно, като използвате MSBuild, или да създадете пакет от Visual Studio. Може би .csproj може да бъде модифициран, за да извърши трансформацията като действие след изграждането. - person davidtbernal; 01.12.2010

Очевидно можете да стартирате вашата вътрешна среда в режим "Debug" срещу "Release". Променливата ENV в Rails и подобни конвенции в PHP очевидно са една от техните силни страни. Както при всеки избор, винаги има компромис и това е един от тях. Когато съм в релси, мога да оценя възможността да заредите вашата ENV променлива (тест, разработка, производство...) с подходящите скъпоценни камъни и други подобни. Чудесно е. Когато съм в релсите, също има значителна разлика между VS intellisense, вероятно най-доброто, което съществува.

Въпреки това някои трикове, които видях, са кодиране в свойствата на MachineName в подходящи низове за връзка и други подобни, така че WebConfigs могат лесно да се предават между различни разработчици и сървъри и т.н.

person Justin Soliz    schedule 24.11.2010

Лично аз използвам machine.config за управление на специфични за средата настройки. Този файл съдържа специфични за машината настройки.

Ако нямате специални машини за всяка среда, но вместо това използвате различни уеб сайтове в IIS, можете да имате основен файл web.config, разположен в корена на всеки уеб сайт, съдържащ специфични за средата настройки.

По принцип в този глобален конфигурационен файл съхранявам двойки ключ/стойност, съдържащи имената на моя SQL Server, сървър за уеб услуги, ... които варират в различните среди и след това в моето приложение използвам тези ключове, за да конструирам крайните низове за свързване, http уеб адреси , ...

След като тези глобални конфигурационни настройки са налице, можете да разположите точно същите файлове на приложението с web.config във всички среди.

person Darin Dimitrov    schedule 08.12.2010