【问题标题】:How to get the base directory path in App.config?如何获取 App.config 中的基本目录路径?
【发布时间】:2017-04-25 19:40:23
【问题描述】:

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

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

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

<add key="AssemblyPath" value="????" /> value 中写什么?因为它会因用户而异,如何动态获取它? 然后在项目中,我们想用这个作为

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

我查看了很多关于 StackOverflow 流的帖子,但没有得到这个特定的答案。

【问题讨论】:

  • 在配置文件中设置路径以便以后在代码中使用它的价值是什么时候可以调用AppDomain.CurrentDomain.BaseDirectory?配置文件没有执行任何东西,它只是 xml,您必须运行应用程序并将其写入配置文件。
  • @JSteward 所以我们正在写的是,我们正在下载 pdf 文件,并且对于每个 staging/dev/prod 环境,我们希望能够灵活地处理我们保存这些文件的位置。我们希望将其保留为程序集路径的默认位置。因此,如果登台环境想要更改路径,他们应该能够通过更改 staging_app.config 来做到这一点。这就是我们希望在 config.file 中有这个的原因
  • @JSteward 这个解释可以去掉负号吗?
  • 投反对票的不是我。但是已经提供的答案之一应该可以满足您的需求。

标签: c# wpf c#-4.0


【解决方案1】:

你可以做的是有类似的东西

<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】:

    我认为您应该在此答案中使用波浪号: How to specify path in .config file relative to the file?

    &lt;add key="AssemblyPath" value="~/YourDirectoryYouWantToAccess"&gt;

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        【解决方案4】:

        这里如何

        AppDomain.CurrentDomain.BaseDirectory
        

        另一种方法是

        Path.GetDirectoryName(Application.ExecutablePath)
        

        【讨论】:

        • 虽然答案是旧的......这真的不是一个答案......问题是如何在 app.Config(xml) 而不是在代码隐藏(cs) 中实现这一点跨度>
        • App.config 可以有字符串(json 或 xml)表示的值,你不能在 app.config 中执行任何代码,希望你能得到每个人在这里想说的意思
        • 你是什么意思?问题清楚地表明从 app.settings 实现它.....解决方案非常简单
        • 你解决了吗?
        • 你在 app.config 中写入路径值吗?
        【解决方案5】:

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

         <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
        

        希望这有助于解决问题!

        【讨论】:

        • BaseDirectory 不是一个方法,它是一个属性。请修复代码。
        • @Mary ,修复什么??代码很好...在抱怨之前调试它-_-
        • @Mary,我知道这是一个属性,我什么时候提到它是一个方法?
        • 代码如果需要调试就不行。它不会像呈现的那样编译。我确切地告诉你出了什么问题。但最后一行还有一个错误。
        • 回去学习C#的基础知识。如何在 C# 中调用方法?
        【解决方案6】:

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

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

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

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

        【讨论】:

          猜你喜欢
          • 2011-07-15
          • 1970-01-01
          • 1970-01-01
          • 2013-08-02
          • 2013-02-02
          • 1970-01-01
          • 2019-05-14
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多