是否可以在web.config中的connectionstring,attachDbFileName属性中指定相对路径引用?
例如,在我的数据库位于App_data文件夹中,我可以轻松地将AttachDBFilename指定为| DataDirectory | \ mydb.mdf和| Datadirectory |将自动解析到正确的路径。
现在,假设web.config文件位于A文件夹中,但数据库位于B \ App_data文件夹中,其中A和B文件夹位于同一文件夹中。无论如何使用相对路径引用来解析到正确的路径?
答案 0 :(得分:15)
我在以下场景中遇到了同样的问题:我希望使用与集成测试中的应用程序相同的数据库。
我采用了以下解决方法:
在我的测试项目的App.config中,我有:
<appSettings>
<add key="DataDirectory" value="..\..\..\BookShop\App_Data\"/>
</appSettings>
在测试设置中,我执行以下代码:
var dataDirectory = ConfigurationManager.AppSettings["DataDirectory"];
var absoluteDataDirectory = Path.GetFullPath(dataDirectory);
AppDomain.CurrentDomain.SetData("DataDirectory", absoluteDataDirectory);
答案 1 :(得分:10)
这取决于你的'| DataDirectory |'的位置位于。如果'| DataDirectory |'的解析值在文件夹A(web.config所在的位置)中,然后是 - 您不能指定不是“| DataDirectory |”的已解析值的子文件夹的相对路径。
可以做的是设置'| DataDirectory |'的值通过调用 AppDomain.SetData 方法,无论您想要什么。
来自MSDN在线文档:
使用DataDirectory时,结果文件路径在目录结构中不能高于替换字符串指向的目录。例如,如果完全展开的DataDirectory是C:\ AppDirectory \ app_data,则上面显示的示例连接字符串可以工作,因为它位于c:\ AppDirectory下面。但是,尝试将DataDirectory指定为| DataDirectory | .. \ data将导致错误,因为\ data不是\ AppDirectory的子目录。
希望这有帮助。
答案 2 :(得分:1)
将以下属性添加到测试方法中:
[DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")]
[DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)]
|DataDirctory|
变量由系统在运行测试时定义。 DeploymentItem将电子表格复制到那里。您指向电子表格以及电子表格中来自数据的选项卡。右键单击选项卡,将其重命名为易于记忆的内容。
答案 3 :(得分:0)
在IIS中,您还可以创建一个虚拟目录,指向保存真实数据库的任何位置。然后您的连接字符串只引用虚拟目录。
答案 4 :(得分:0)
Web.config
<appSettings>
<add key="FilePath" value="App_Data\SavedFiles\"/>
</appSettings>
Path.cs
string filePath = AppDomain.CurrentDomain.BaseDirectory + (ConfigurationManager.AppSettings["FilePath"]);
为我工作.. !!