如何在App.config中获取基目录路径?

时间:2017-04-25 19:40:23

标签: c# wpf c#-4.0

从app.config我想动态获取项目exe所在的基本目录路径。那可能吗?

例如,在C#代码中,我们可以编写以下内容来获取路径 string executablePath = AppDomain.CurrentDomain.BaseDirectory

有没有办法在app.config中获取此路径?

<add key="AssemblyPath" value="????" />要写什么价值?因为它会因用户而异,如何动态获取它? 然后在项目中,我们希望将其用作

string executablePath = ConfigurationManager.AppSettings["AssemblyPath"];

我在StackOverflow流程上查了很多帖子,但没有得到这个特别的答案。

6 个答案:

答案 0 :(得分:0)

appSettings部分是关联的String键和String值的集合的简单表示,可以使用键或索引访问它们。它不会在字符串上执行任何代码,必须加载应用才能获得AppDomain.CurrentDomain

答案 1 :(得分:0)

你能做的事情就是

<add key="AssemblyPath" value="!!BASE_DIRECTORY!!" />

然后在你的代码中

var assemblyPathConfigEntry = ConfigurationManager.AppSettings["AssemblyPath"];
string pathToUse;
switch(assemblyPathConfigEntry) 
{
    case "!!BASE_DIRECTORY!!":
        pathToUse = AppDomain.CurrentDomain.BaseDirectory;
        break;
    default:
        pathToUse = assemblyPathConfigEntry;
        break;
}  

return pathToUse;

在这种情况下,如果您将!!BASE_DIRECTORY!!作为值,它将获取当前的基本目录,否则它将只使用您放在那里的路径。

答案 2 :(得分:0)

这里是怎样的

AppDomain.CurrentDomain.BaseDirectory

另一种方式是

Path.GetDirectoryName(Application.ExecutablePath)

答案 3 :(得分:0)

解决方案有点简单。在Key中创建App.config,如下所示:(在我的情况下,它是一个连接字符串)

 <connectionStrings>
<add name="Test" connectionString="Data Source=|DataDirectory|\mydatabase.mdb;Initial Catalog=OmidPayamak;Integrated Security=True"/>
 </connectionStrings>

然后从你的代码中,执行以下操作:

 var currentDomain = AppDomain.CurrentDomain;
 var basePath = currentDomain.BaseDirectory;
 currentDomain.SetData("DataDirectory", basePath+"\\Data");

 //now the value of your connection string's Data Source would be like this :

 //myAppPath\Data\Mydatabase.mdb

希望这有助于解决问题!

答案 4 :(得分:0)

我认为你应该在这个答案中使用Tilde: How to specify path in .config file relative to the file?

<add key="AssemblyPath" value="~/YourDirectoryYouWantToAccess">

答案 5 :(得分:0)

在.Net / .Net Core中, 您可以使web.config / appsetting.json在输出目录中获得一个副本。 步骤如下: 1.转到文件的属性 2.在选项“复制到输出目录”中,将其设置为“始终复制”(默认为“不复制”)。

之后,您可以使用Directory.GetCurrentDirectory();来获取路径 这将是项目的bin文件夹路径,但是可以,因为配置文件将出现在bin文件夹中。

您也可以使用Environment.CurrentDirectory();

为获得最佳实践,请将路径设置为环境变量。