2013-09-09 4 views
6

| DataDirectory | у вас была одна работа. |DataDirectory| на IIS7.5 решает:| DataDirectory | возвращает неправильный путь к папке AppData

C:\inetpub\wwwroot\appname\App_Data

Эта папка не существует. Правильная папка:

C:\inetpub\wwwroot\appname\bin\App_Data

Все хорошо на Dev машине, но когда я раскрываю к серверу, AppData помещается в bin\. Я использую AppData, как показано в любом проекте Visual Studio 2010, и развертывание с помощью «пакета развертывания сборки» (VS2010), затем «« Импорт приложения »(диспетчер IIS).

Я знаю, что я могу установить путь вручную с помощью AppDomain.SetData или аналогичного, но моя интерпретация точки функции - вернуть правильное местоположение для развертывания на разных серверах. Это не очень полезно, если мне нужно жестко закодировать этот путь.

Строка соединения: "Data Source=|DataDirectory|\db.sqlite;"

Как сделать |DataDirectory| возвращение путь AppData или же предотвратить создание ненужного bin\ папки?

+0

Надеюсь, вы имеете в виду '@ 'Data Source = | DataDirectory | \ db.sqlite;" ', иначе он будет искать файл с именем' App_Datadb.sqlite'. –

+0

Я пробовал оба, и оба на самом деле работают. Разрешенный каталог в вопросе является копией и вставкой из '

@ AppDomain.CurrentDomain.GetData (« DataDirectory »)

' (что странно не было задокументировано). –

ответ

4

Это тоже для меня. Я попробовал различные комбинации «Копировать/Не копировать» и изменил параметр «ExcludeApp_Data», но не смог добиться согласованности между Visual Studio и опубликованной версией. Чтобы не иметь двух копий данных на сервере, я в конечном итоге изменил приложение, чтобы сначала проверить папку App_Data, и если он не найден в папке bin/App_Data.

+0

как мудрый, у меня есть аналогичная проблема с доступом к файлу .cer из app_data в моем веб-api. использование хранилища blob может быть выбором, но я собираюсь использовать один и тот же метод чередования между двумя местоположениями. не очень чистый подход, но это кажется необходимым злом, – ioWint

2

Один из подходов состоит в том, чтобы НЕ жестко закодировать путь в вашем источнике C#, но поместить его в ваш web.config. Затем вы можете протестировать один путь с помощью локального веб-сервера VisualStudio и использовать модифицированный путь для работы с IIS.

Дополнительным преимуществом является документирование вашего App_Data дерева, например .:

<appSettings>  
    <add key="ProjABCstyledir" value="~/bin/App_Data/ABCstyles" /> 
    ... 
</appSettings> 

В своем коде вы должны использовать Server.MapPath() разрешить тильды.

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