【问题标题】:Relative path reference in WebConfig.ConnectionStringWeb Config.Connection String 中的相对路径引用
【发布时间】:2010-09-12 14:45:09
【问题描述】:

是否可以在 web.config 中的 connectionstring、attachDbFileName 属性中指定相对路径引用?

例如,在我的数据库位于 App_data 文件夹中,我可以轻松地将 AttachDBFilename 指定为|DataDirectory|\mydb.mdf 和|Datadirectory|会自动解析到正确的路径。

现在,假设 web.config 文件位于 A 文件夹中,但数据库位于 B\App_data 文件夹中,其中 A 和 B 文件夹位于同一文件夹中。反正有没有使用相对路径引用来解析到正确的路径?

【问题讨论】:

    标签: c# sql-server


    【解决方案1】:

    这取决于你的 '|DataDirectory|'位于。如果 '|DataDirectory|' 的解析值位于文件夹 A(web.config 所在的位置)中,然后不 - 您不能指定不是“|DataDirectory|”的已解析值的子文件夹的相对路径。

    可以做的是设置'|DataDirectory|'的值通过调用 AppDomain.SetData 方法,随时随地访问您想要的位置。

    来自 MSDN 在线文档:

    当使用 DataDirectory 时,在目录结构中生成的文件路径不能高于替换字符串指向的目录。例如,如果完全展开的 DataDirectory 是 C:\AppDirectory\app_data,则上面显示的示例连接字符串有效,因为它位于 c:\AppDirectory 之下。但是,尝试将 DataDirectory 指定为 |DataDirectory|..\data 将导致错误,因为 \data 不是 \AppDirectory 的子目录。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

      在 IIS 中,您还可以创建一个指向实际数据库所在位置的虚拟目录。然后你的连接字符串只是引用虚拟目录。

      【讨论】:

        【解决方案3】:

        我在以下场景中遇到了同样的问题:我想使用与集成测试中的应用程序相同的数据库。

        我采用了以下解决方法:

        在我的测试项目的 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);  
        

        【讨论】:

        • 非常感谢!!救了我这么多!
        【解决方案4】:

        在测试方法中添加以下属性:

        [DeploymentItem("..\\TestSolutionDir\\TestProjedtDir\\TestDataFolder\\TestAutomationSpreadsheet.xlsx")]
        [DataSource("System.Data.Odbc", "Dsn=Excel Files;dbq=|DataDirectory|\\TestAutomationSpreadsheet.xlsx", "SpreadsheetTabName$", DataAccessMethod.Sequential)]
        

        |DataDirctory| 变量由系统在运行测试时定义。 DeploymentItem 将电子表格复制到那里。您指向电子表格和数据来自电子表格中的选项卡。右键单击选项卡以将其重命名为易于记忆的名称。

        【讨论】:

          【解决方案5】:

          Web.config

            <appSettings>
              <add key="FilePath" value="App_Data\SavedFiles\"/>
            </appSettings>
          

          Path.cs

          string filePath = AppDomain.CurrentDomain.BaseDirectory + (ConfigurationManager.AppSettings["FilePath"]);
          

          为我工作..!!

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-05
            • 2010-09-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多