Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/visual-studio/7.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
Asp.net 如何使web.config转换包含外部机密文件?_Asp.net_Visual Studio_Iis_Web Config_Web.config Transform - Fatal编程技术网

Asp.net 如何使web.config转换包含外部机密文件?

Asp.net 如何使web.config转换包含外部机密文件?,asp.net,visual-studio,iis,web-config,web.config-transform,Asp.net,Visual Studio,Iis,Web Config,Web.config Transform,是否有办法在Visual Studio 2015+中进行web.config转换,以包含所述外部引用的机密文件的内容 这在本地开发时效果很好,并且不包括源代码管理中的文件,但是当我将web应用部署到服务器时,我希望它包括它所连接的另一个web服务的用户名和密码。如果我在服务器上的IIS中手动输入设置,则每次发布应用时都会丢失这些设置 如果我在我的web.config中省略appSettings块中的键(以便它们仅在secrets文件中引用),则每当我发布应用时,服务器上IIS中手动输入的设置都会

是否有办法在Visual Studio 2015+中进行web.config转换,以包含所述外部引用的机密文件的内容

这在本地开发时效果很好,并且不包括源代码管理中的文件,但是当我将web应用部署到服务器时,我希望它包括它所连接的另一个web服务的用户名和密码。如果我在服务器上的IIS中手动输入设置,则每次发布应用时都会丢失这些设置

如果我在我的web.config中省略appSettings块中的键(以便它们仅在secrets文件中引用),则每当我发布应用时,服务器上IIS中手动输入的设置都会被完全删除

为了更好的安全性,能够在外部文件中引用某些内容,并且不向源代码管理签入密码,这并不是一个好主意,因为我的部署现在是一场噩梦。我不想在每次部署后在服务器上的web.config文件中手动输入密码

我也不想研究加密,因为我必须对部署到的每台服务器进行加密,以便为每个web.config文件使用相关的机器密钥

我最近才考虑从源代码管理中删除此密码,作为对最近推动改进工作中安全实践的回应——我非常理解并同意这一点——但我也能理解为什么安全考虑得如此之差,因为如果没有可用的工具,普通开发人员的生活会变得非常不愉快

肯定有办法不用加密吗


谢谢。

按照您链接到的Microsoft文档示例,将此XDT转换放在
Web.Release.config
中应该可以做到:

<appSettings file="..\..\AppSettingsSecrets.config" xdt:Transform="SetAttributes">
    <add key="mailAccount" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="mailPassword" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="TwilioSid" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="TwilioToken" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="TwilioFromPhone" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="GoogClientID" xdt:Locator="Match(key)" xdt:Transform="Remove" />
    <add key="GoogClientSecret" xdt:Locator="Match(key)" xdt:Transform="Remove" />
</appSettings>

您不需要
元素本身的
xdt:Locator
属性,因为只有一个appSettings


编辑:我误解了原来的问题。目标是包含引用文件的内容,这是使用XDT无法实现的。必须有另一种方法。

如果没有CI系统,我认为最好的选择可能是执行脚本的构建前/构建后操作

我建议您将实际值替换为敏感web.config值的标记(一些独特的/容易找到的值,如我的产品、数据库、密码等)。然后可以将web.config安全地签入源代码管理

在VS中,您可以添加一个构建操作来运行自定义powershell或exe,以便在正常压缩和部署之前,基本上使用实际值对令牌执行查找和替换

具体如何/在何处存储实际值以及脚本如何工作取决于您。根据从vs传递到脚本/exe的数据或从web.config本身(甚至作为注释嵌入到web.config中)中的数据,您可以很容易地在部署计算机上找到一个文件或某个数据库中的一行

以下是vs中可用变量的详细信息,您可以在生成操作中传递给exe或脚本:


如果您想使用PowerShell,您可以向web.config(或任何文本文件)读取/替换/写入值,答案如下:

如何部署代码?注入凭据通常在部署期间作为CI管道的一部分完成。我在Visual Studio中单击“发布”按钮,将其生成,然后复制到它所在的服务器文件夹。没有奇特的CI管道(尚未)。我尝试在我的web.Release.config中的appSettings中包含文件=“但没有添加xdt:Transform=“SetAttributes”;如果我添加这个,它仍然不包括转换文件中该机密文件中的设置。我不确定为什么要xdt:Transform=“Remove”这些设置,但我还是尝试添加了这些设置,因为您提出了建议,但它仍然没有生成包含秘密设置的转换文件。@MarcFearby哦,我误解了您的问题,我以为您希望配置看起来像MSDN示例一样。您希望结果文件中包含内容。据我所知,使用XDT是不可能的。必须有其他的方法。如果微软允许没有特别的CI/CD管道设置(我可能很快就能访问它,所以我还不必求助于powershell,如果运气好的话)的人使用它,那就太好了。