Использование переменных среды для файла .config в .NET

Мне нужно указать путь к библиотекам, на которые ссылается сборка, в файле .config. Проблема в том, что путь можно найти в env. переменная. Можно ли использовать какой-то макрос% DLLPATH% в файле .config?

24 .net
11.12.2008 07:56:11
2 ОТВЕТА

Это запись конфигурации, которую вы читаете, или .NET читает? Если вы читаете это самостоятельно, вы можете сделать соответствующую замену самостоятельно (используя Environment.ExpandEnvironmentVariables для выполнения партии или Environment.GetEnvironmentVariable, если вы хотите быть более избирательным).

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

На самом деле, даже если вы можете сделать замену, это действительно то, что вы хотите сделать? Если вам нужно указать полный путь к DLL, я подозреваю, что вам нужно будет найти его через DLLPATH (проверка его присутствия в каждой части пути), а затем подставьте под путь% DLLPATH% \ Foo.dll полный путь в Foo.dll.

7
11.12.2008 08:12:50
Спасибо Джон. Я не уверен, что точно помню эту проблему, но, насколько я помню, я хотел указать путь к файлу .config, где средство связывания .NET должно искать ссылочную сборку. Если я прав, возможно только указать относительный путь в подкаталогах из текущего каталога, но не полный абсолютный путь.
Jox 22.12.2010 11:44:23

Да, это возможно! Предположим, у вас есть что-то подобное в вашей конфигурации:

<configuration>
  <appSettings>
    <add key="mypath" value="%DLLPATH%\foo\bar"/>
  </appSettings>
</configuration>

Тогда вы можете легко получить путь с помощью:

var pathFromConfig = ConfigurationManager.AppSettings["mypath"];
var expandedPath = Environment.ExpandEnvironmentVariables(pathFromConfig);

ExpandEnvironmentVariables(string s) делает волшебство, заменяя все переменные окружения в строке их текущими значениями.

29
11.12.2008 08:17:52