从app.config我想动态获取项目exe所在的基本目录路径。那可能吗?
例如,在C#代码中,我们可以编写以下内容来获取路径
string executablePath = AppDomain.CurrentDomain.BaseDirectory
有没有办法在app.config中获取此路径?
<add key="AssemblyPath" value="????" />
要写什么价值?因为它会因用户而异,如何动态获取它?
然后在项目中,我们希望将其用作
string executablePath = ConfigurationManager.AppSettings["AssemblyPath"];
我在StackOverflow流程上查了很多帖子,但没有得到这个特别的答案。
答案 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();
为获得最佳实践,请将路径设置为环境变量。