Как получить несколько перекрывающихся файлов конфигурации для нескольких решений в ASP.NET? - PullRequest
0 голосов
/ 30 марта 2011

Я очень новичок в ASP.net, поэтому я просто выясняю это.

Во-первых, у меня есть несколько отдельных проектов, которые будут размещены на одном сервере.

Во-вторых, они должны иметь возможность совместно использовать определенные параметры (например, строку подключения, параметры конфигурации и т. Д.).

В-третьих, эти общие параметры должны быть настраиваемыми для различных развертываний (test, prod и т. Д.).

Например, у меня есть два проекта: Проект A Проект B

У меня есть настройка с именем «Setting1», которая должна быть доступна обоим проектам.

Значение для «Setting1» должноисходят из одного из этих файлов: «TEST-config.xml», «PROD-config.xml» (будет более двух конфигурационных файлов, но я пока оставлю это простым)

И я хочуиметь только одно место для изменения одного текстового файла, который определяет, какой из файлов * -config.xml будет использоваться:

"WhichSettingsFile.xml"

Вот примерструктура файла:

\ WhichSettingsFile.xml \ TEST-config.xml \ PROD-config.xml \ Project1 \ Project1.csproj \ Project1 \ web.config \ Project1 ... (другие файлы) \ Project2 \ Project2.csproj \ Project2 \ web.config \ Project2 ... (больше файлов)

В настоящее время каждый проект имеет "web.config", подобный этому:

<appSettings file="..\WhichSettingsFile.xml">
    ...
</appSettings>

Затем у меня есть файл "WhichSettingsFile.xml", подобный этому:

<?xml version="1.0" encoding="utf-8" ?>
<appSettings>
    <add key="SettingsFilenamePrefix" value="PROD" />
</appSettings>

И у меня есть код, подобный следующему:

public static string GetSetting(name) {
    string filename = System.Web.Configuration.WebConfigurationManager.AppSettings["SettingsFilenamePrefix"] + "-config.xml";
    // Open filename, parse as XML, get the values I need from it.
}

Это означает, что я могу разместить оба проекта на сервере A, установить в файле WhichSettingsFile.xml «PROD», и все настройки будут считаны из"PROD-config.xml".Я могу сделать то же самое для тестового сервера.И все эти значения распределяются между отдельными проектами.

Однако мне нужно иметь возможность редактировать эти файлы в файловой системе, а не встраивать их в dll / сборки.Когда я запускаю проект (ы) из Visual Studio, встроенный хост-сервер asp.net будет развертывать файлы примерно так:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\lskdjflskj\slkdjfsld\klsjdfwbe

Но с тех пор не будет никакого файла WhichSettingsFile.xmlэто встроено в сборку.Кроме того, файлы «PROD-config.xml» и «TEST-config.xml» не будут включены, поскольку они на самом деле не являются частью «кода» и не копируются.

В идеале, яЯ хочу, чтобы это было в папке развертывания:

C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project1\(all the compiled files here)
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\Project2\(all the compiled files here)
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\WhichSettingsFile.xml
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\PROD-config.xml
C:\Users\[username]\AppData\Local\Temp\6\Temporary ASP.NET Files\abc123\TEST-config.xml

Но я не уверен, как это сделать.

Так что мои проблемы: - "WhichSettingsFile.xml" встроен всборка.Я хочу, чтобы это был простой текстовый файл в файловой системе, на который ссылается приложение во время выполнения.Я понимаю, что мне, возможно, нужно избегать использования для этого.Есть ли способ лучше?-Я хочу, чтобы в файловой системе было несколько конфигурационных файлов, также в виде простых текстовых файлов.

Я знаю, что у меня не работает, и, вероятно, запутано.Но есть ли лучший способ сделать это?Спасибо !!

1 Ответ

0 голосов
/ 30 марта 2011

у вас может быть отдельный web.config для каждого каталога.корневой каталог web.config повлияет на все вложенные папки.но значения могут быть перезаписаны в подпапках с локальными файлами web.config.

вы можете добавить новые значения с помощью <add ... />, вы можете удалить существующее значение, установленное в глобальном web.config с помощью <remove ... />, вы можете очистить все значения в разделе, используя <clear />.

http://weblogs.asp.net/mnolton/archive/2005/01/10/349986.aspx

Если наличие отдельных каталогов не соответствует вашей архитектуре, вы можете сохранить свою конфигурацию в базе данных, что идеально подходит для большинства сценариев, поскольку предлагает кэширование, возможность изменениязначения без перезапуска приложения, совместного использования настроек между несколькими веб-серверами, более простого развертывания (поскольку вам не нужно развертывать файлы при изменении настроек) и так далее.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...