Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Web.config转换更改appsettings的路径_C#_Asp.net_Web Config_Web Config Transform - Fatal编程技术网

C# Web.config转换更改appsettings的路径

C# Web.config转换更改appsettings的路径,c#,asp.net,web-config,web-config-transform,C#,Asp.net,Web Config,Web Config Transform,我有一个web.config文件,在调试文件中包含connectionstring&appsettings,如下所示: <connectionStrings configSource="config\connectionStrings-debug.config" /> <appSettings configSource="config\AppSettings-debug.config" /> 但在部署时,我已手动将其更改为prod值: <connectionS

我有一个web.config文件,在调试文件中包含connectionstring&appsettings,如下所示:

<connectionStrings configSource="config\connectionStrings-debug.config" />
<appSettings configSource="config\AppSettings-debug.config" />

但在部署时,我已手动将其更改为prod值:

<connectionStrings configSource="config\connectionStrings.config" />
<appSettings configSource="config\AppSettings.config" />


我正在研究转换,但我不知道在这种情况下如何使用它,因为每个示例都试图更改一个值而不是文件的路径。

有很多方法可以解决这个问题

第一个是有两个连接字符串,一个用于调试,另一个用于实时使用。声明字符串时,请使用
Name
属性为它们提供一个唯一标识符,您可以从代码中调用该标识符。然后,您可以使用
If(System.Diagnostics.Debugger.IsAttached)
或其他布尔检查来确定运行时使用哪个字符串,由该
名称获取

另一种方法是将web.config和app.config文件从源代码管理中拉出来(即通过VS、添加到git.ignore文件等)。它们更好地保存在使用它们的环境中。这可能是最好的做法。如果您不移动配置文件,您可以将它们保留在原位,而不会出现任何问题


您可以尝试使用决定动态使用哪种配置文件的逻辑、预处理器命令(它决定根据您使用的配置文件编译哪些代码)等。不过,从长远来看,让您的配置文件在其部署位置上保持唯一性的逻辑会给您带来最少的麻烦

您应该能够通过简单的转换实现您想要的。e、 g:



appSettings也是如此。

我看到这样做的一种方法是不使用configSource(这意味着所有环境都具有到辅助文件的相同路径)。然后有一个生成后事件将开发环境中的“调试”版本复制到公共位置。以及生成特定于环境的版本的部署过程。