Как я могу правильно ссылаться на этот файл конфигурации, чтобы я не усердно кодировал путь? - PullRequest
1 голос
/ 06 ноября 2010

Я пытаюсь сослаться на этот файл конфигурации, который находится в той же папке, что и класс, содержащий этот код.Я хотел бы сделать некоторые относительные ссылки на него, чтобы я мог использовать его из других мест.Когда я пытаюсь использовать только имя файла без пути, приложение не находит файл.Я отладил, и папка, кажется, ищет в папке IIS, что имеет смысл, поскольку я использую его в IIS-сервисе wcf.В любом случае, как я могу правильно ссылаться на этот файл конфигурации без жесткого кодирования пути?Так выглядит в локации проекта.Спасибо за любую помощь.Хороших выходных!

 public void Init()
    {
        var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = @"C:\workspace\new\UnityDemo-v1.0.0.1\src\Core\unity.config" };

        Configuration configuration = ConfigurationManager.OpenMappedExeConfiguration(fileMap, ConfigurationUserLevel.None);
        var unitySection = (UnityConfigurationSection)configuration.GetSection("unity");
        _container = new UnityContainer().LoadConfiguration(unitySection);
    }

Ура,
~ ck

Ответы [ 3 ]

1 голос
/ 07 ноября 2010

Использовать файлы конфигурации со службами, размещенными в IIS, довольно сложно, поскольку каталог приложений, в котором работает IIS, будет надежно защищен от размещения там любых файлов. Могут быть и другие способы, но для меня это работает с именем файла web.config и копированием его в каталог, в котором находится файл .svc, а затем вы можете напрямую прочитать настройки, не обращаясь к файлу конфигурации. Я не знаю ни одного способа сделать это копирование из самой программы. Установщик сможет сделать это, хотя. Смотри: этот вопрос

1 голос
/ 12 января 2017

Другой вариант, который работал для меня в .NET, - это использование Server.MapPath.Это возвращает полный путь заданного относительного виртуального пути в веб-приложении.

var filePath = Server.MapPath("/unity.config")

Этот физический путь к файлу затем можно использовать для создания карты файлов, как указано выше.

1 голос
/ 06 ноября 2010

Используйте Application.StartupPath, чтобы получить путь, в котором запущено приложение, затем просто объедините с именем файла, чтобы получить полный путь:

var filePath = Path.Combine(Application.StartupPath, "unity.config");
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };

Это будет работать только в winforms.


Другой вариант - использовать Environment.CurrentDirectory - по умолчанию он будет установлен в каталог запуска процесса. Обратите внимание, что это свойство является изменяемым:

var filePath = Path.Combine(Environment.CurrentDirectory, "unity.config");
var fileMap = new ExeConfigurationFileMap { ExeConfigFilename = filePath };
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...