AppSettings в приложении или веб-конфигурации с использованием связанного файла

Я пытаюсь ссылаться на некоторые общие настройки конфигурации между службой Windows и веб-сайтом ASP.NET MVC. Я делаю это, используя атрибут файла в appSettings в App.config или Web.config(соответственно). Файл (с именем common.config), на который делается ссылка, является связанным файлом в отдельном проекте в том же решении. Этот файл common.config имеет значение Контент с Копировать всегда в обоих проектах.

Этот ответ стека на аналогичный вопрос кажется, по крайней мере, для configSource, это решение будет работать. Я не хочу configSource, хотя, поскольку я хочу, чтобы только несколько свойств были обычными среди двух проектов. Обновление: Я просто попробовал это, и configSource также не работает. Он не может найти файл конфигурации. Это заставляет меня думать, что common.config не всегда рассматривается как содержимое с копией.

Пример App.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
  <appSettings file="common.config">
    <add key="NotCommonKey" value="1"/>
  </appSettings>
</configuration>

Пример Web.config

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <appSettings file="common.config">
    <add key="NotCommonKey2" value="2" />
  </appSettings>
</configuration>

Пример common.config(Содержимое → Копировать всегда)

<appSettings>
  <add key="CommonKey" value="1" />
</appSettings>

Я использую ConfigurationManager/ WebConfigurationManager из свойства AppSettings.

Любые идеи, почему, когда common.config является связанным файлом, значения AppSettings не используются, а когда он не связан, он работает нормально?

Спасибо!

Ответ 1

В Web.Config вы должны добавить "bin/" (пример ниже).

По умолчанию web.config НЕ копируется в папку bin, но файл common.config, поэтому вы должны добавить путь из web.config. В не-веб-проекте поведение по умолчанию заключается в том, что файл App.config копируется в папку bin с именем MyProgram.exe.config и находится в том же каталоге, что и common.config.

<appSettings file="bin/common.config">

Ответ 2

Идея использования "bin/..." хороша, но приводит к ошибке, говорящей, что "/" является недопустимым символом в результирующем виртуальном пути.

Правильное решение - использовать "bin...".

ура