Этот вопрос довольно старый, но я хотел бы поделиться тем, что сработало для меня. Надеюсь, что это будет полезно для людей, которые ищут некоторую информацию, получающую доступ к свойствам во внешнем местоположении.
Это то, что сработало для меня.
Содержимое файла свойств:
PROVIDER_URL=t3://localhost:8003,localhost:8004
applicationContext.xml
содержимое файла: (Spring 3.2.3)
Примечание: ${user.home}
является системным свойством ОС.
<context:property-placeholder system-properties-mode="OVERRIDE" location="file:${user.home}/myapp/latest/bin/my-env.properties"/>
<bean id="appsclusterJndiTemplate" class="org.springframework.jndi.JndiTemplate">
<property name="environment">
<props>
<prop key="java.naming.factory.initial">weblogic.jndi.WLInitialContextFactory</prop>
<prop key="java.naming.provider.url">${PROVIDER_URL}</prop>
</props>
</property>
</bean>
${PROVIDER_URL}
заменено значением в свойствах файла
Ну, я понял это сам после отладки в течение почти 5 часов, Черт!
Проблема была в том, что когда я использовал OpenFileDialog для получения пути к файлу, он менял текущий каталог на тот который выбран в диалоговом окне, поэтому программа не смогла найти файл конфигурации. Все, что я сделал, - это установил для свойства RestoreDirectory OpenFileDialog значение true, и poof это сработало
Спасибо всем, ChrisF, Eoin Campbell и pablito.
Вы получаете доступ к файлу по его полному пути или только по имени файла?
Если последнее, то это будет работают, когда файл находится в той же папке, что и исполняемый файл, но не иначе.
ОБНОВЛЕНИЕ
Похоже, что все сложнее, чем я думал вначале, и это не похоже на проблему - см. Комментарии. Строка, вызывающая исключение:
externalConfig.AppSettings.Settings["ServerAddress"].Value = serverAddr;
Это означает, что где-то в цепочке есть пустая ссылка.
Какой код вы используете, чтобы получить имя файла и путь обратно из OpenFileDialog.
Это полный путь к файл?
например
openFileDialog1.FileName; //Contains "C:\\Path\\To\\The\\File.txt"
Судя по всему, сохраняется только имя файла, поэтому ваше приложение просматривает только текущий путь.
У меня была такая же проблема, я не знаю, поможет ли это вам, но когда я изменил имя файла конфигурации, который находился в другой папке, как в вашем случае, на .config и он больше не падал, в моем случае я мог изменить имя, поэтому я не продолжал расследование, как заставить его работать с другим именем, но, конечно, я хотел бы знать.