c# - 在 C# 中通过主机名自动加载配置

标签 c# app-config config

我们在不同的机器上开发一个项目。每台机器都有自己的数据库连接。

目前我们使用外部文件从 app.config 中加载数据库配置

<connectionStrings configSource="DB.config" />

现在我希望能够保存不同的文件,例如 DB.BobsPC.configDB.JacksPC.config,其中 BobsPCJacksPC 是代码被调试机器的主机名。应该自动使用正确主机的配置。

类似于:

<connectionStrings configSource="DB.[hostname].config" />

有没有聪明的方法来做到这一点?

最佳答案

您可以使用 "XML-Document-Transform Syntax"通常,此语法适用于 Web 项目,但您可以调整它以用于所有类型的项目。

您必须通过添加/更新 TransformXml-Task 来修改您的项目文件(例如 .csproj)。在下面的示例中,通过在 App.config 上应用转换,在编译期间执行转换。如您所见,任务引用了 $(Configuration) 变量,因此转换命令存储在例如在 App.DEBUG.config 或 App.RELEASE.config 中。您可以将其更改为您喜欢的任何 msbuild 变量。如果我没记错的话它是 $(COMPUTERNAME) 所以你必须将你的转换放入 App.MyMachineName.config。

<UsingTask TaskName="TransformXml" 
           AssemblyFile="C:\Program Files\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.Tasks.dll"/>
<Target Name="AfterBuild">
  <!-- use App.$(COMPUTERNAME).config for specific machine configuration -->
  <TransformXml Source="App.config" 
                Condition="Exists('App.$(Configuration).config')" 
                Transform="App.$(Configuration).config" 
                Destination="$(OutDir)$(AssemblyName).dll.config"/>
</Target>

完整说明可在 german blog 中找到。 .

这就是您的机器特定配置的样子:

<?xml version="1.0"?>
<!-- "App.MyMachineName.config" - File name corresponds to the transformation task  -->
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
  <connectionStrings>
    <add name="MyDbConnection"
         connectionString="Data Source=MyServer;Initial Catalog=MyDb;" 
         providerName="System.Data.SqlClient"
         xdt:Transform="SetAttributes" 
         xdt:Locator="Match(name)"/>
  </connectionStrings>
</configuration>

或者,您可以使用 XSL Syntax

关于c# - 在 C# 中通过主机名自动加载配置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17927818/

相关文章:

c# - Master和Detail must be set before adding MasterDetailPage to a container 错误在Xamarin forms中

asp.net-mvc - 动态设置 app.config 文件连接字符串

config - 如何编写karate-config.js文件?请提供详细信息

.net - 如何在 ConfigurationSection 中包含简单的集合

c# - 自定义配置部分 : Could not load file or assembly

C# Driver SafeMode off Upserts - 并非所有记录都已更新/插入

c# - 泛型和可空类型

c# - 在 app.config 中设置值 - 没有对程序文件的写入权限

.net - 有条件的 .NET 应用程序设置

c# - 如何删除所有出现的字符/子字符串?