2015-08-26 2 views
0

Я пытаюсь включить подстановку в строку соединения, так что вместо ссылки на C:\Users\<myid>\Documents я могу оставить информацию о ней и дать ей возможность динамически разрешить путь. Я видел в ответе на другой вопрос о том, что данные приложения могут ссылаться на ${AppData}, но до сих пор я не нашел аналогичную переменную/макрос для ссылки на папку «Документы» или даже базовую пользовательскую папку. Я пробовал ${MyDocuments} и ${Documents}, но безрезультатно, и я не могу найти список в любом месте, где есть все возможности. Есть ли способ сделать это без написания пользовательского кода конфигурации? Я не против этого, если это единственный способ пойти; однако я бы предпочел использовать испеченное решение, если оно существует.App.config My Documents macro

+0

Можете ли вы показать нам соответствующие части вашего кода, указать, какой тип приложения .NET это и предоставить ссылку об использовании '$ {AppData}', который вы нашли? – sstan

ответ

1

Предоставленная косвенная информация - DataDirectory |, она настроена в AppDomain. Но для этого требуется модифицировать файл .config, что вполне приемлемо для приложения с серверным стилем, но не того, что вам нужно искать, если вы просто хотите получить файл из домашнего каталога пользователя.

Самый простой способ - просто форматировать строку во время выполнения. Вы можете указать строку подключения в настройки приложения, как это:

Server=.\SQLExpress;AttachDbFilename={0}\MyDataFile.mdf;Database=dbname 

Обратите внимание на {0}, что позволяет вставлять в каталог с String.Format():

var homedir = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments); 
    var connstr = string.Format(Properties.Settings.Default.ConnectionString, homedir); 

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

+0

Мне нравится ваше решение, и оно очень элегантно. Просто пытаясь выяснить, есть ли способ динамически указать путь в app.config, но, похоже, вы говорите «нет» этому вопросу. –

Смежные вопросы