每个开发者私有 web.config
Private web.config for each developer
考虑一组开发 ASP.net 网络应用程序的开发人员。每个开发者都希望拥有一个私有版本的web.config。
"private" 我的意思是开发人员可以在任何给定时刻自由更改文件以满足他们的 dev/test 需求,而不会影响其他团队成员,也不会在源代码管理中结束。
如何在 Visual Studio 2015 年实现这一目标?
到目前为止,我最接近的解决方案是拥有一个从源代码管理中排除的 "private" Solution Configuration with a matching Web.config Transformation 文件 ("web.private.config")。
但这不是一个令人满意的解决方案,因为:
一个。调试时(使用 F5)不会自动转换 运行。开发人员需要记住手动 运行 它。
b。转换的结果最终出现在主 "web.config" 文件中,该文件自然包含在源代码管理中。
正确答案是将本地开发站点托管在与 Visual Studio 解决方案不同的位置。然后,您可以使用 publish profiles to publish changes to that location and web.config transforms 为每个开发人员维护一个单独的本地配置。每个开发人员都将使用不同的发布配置文件,该配置文件使用他们自己的转换来转换 web.config,并将转换后的 web.config 部署到发布位置。然后,您可以使用 Visual Studio 的“调试”>“附加到进程”选项将调试器附加到已发布的站点。
我认为标准化开发环境有很多价值,这样人们就可以下载解决方案并 运行 它。
自定义,长 term/permanent,开发人员特定的配置迟早会导致难以发现的细微错误。
我对您问题的解决方案是找出需要永久性个人配置的原因,并查看是否可以消除这些环境特定差异。
让 web.config 包含一个外部文件(通过 configSource
)并将该文件添加到 .gitignore
我们有一个非常相似的问题,但只需要 Web.config 中 部分的个性化版本。
在这种情况下,通过 configSource
包含外部文件被证明是有问题的,因为此属性完全 替换 -节点。因此,仍然没有办法为所有开发人员保持全局 key/values 和个人 key/values。整个部分完全被包含的私有文件替换。
我们需要的是全局和私有。我们找到的解决方案是 file
属性。它允许合并 Web.config 设置与来自附加文件的设置。
我们最终得到了这样一个结构:
<!-- Web.config with global appSettings) -->
...
<appSettings file="Web.PERSONAL.config">
<add key="BaseUrl" value="https://projectname.dev.local" />
...
</appSettings>
...
<!-- Web.PERSONAL.config with personal appSettings -->
<?xml version="1.0" encoding="utf-8"?>
<appSettings >
<add key="EmailSmtpUser" value="my.name@my.domain.com" />
<add key="EmailSmtpPwd" value="***" />
</appSettings >
如果您在两个文件中放置相同的密钥,Web.PERSONAL.config 版本将覆盖 Web.config 版本.
文件 Web.PERSONAL.config 必须通过 .gitignore 从 Git 中排除。
切记:
虽然 configSource
适用于 Web.config 中的所有节点,但 file
属性仅限于 。
考虑一组开发 ASP.net 网络应用程序的开发人员。每个开发者都希望拥有一个私有版本的web.config。
"private" 我的意思是开发人员可以在任何给定时刻自由更改文件以满足他们的 dev/test 需求,而不会影响其他团队成员,也不会在源代码管理中结束。
如何在 Visual Studio 2015 年实现这一目标?
到目前为止,我最接近的解决方案是拥有一个从源代码管理中排除的 "private" Solution Configuration with a matching Web.config Transformation 文件 ("web.private.config")。
但这不是一个令人满意的解决方案,因为:
一个。调试时(使用 F5)不会自动转换 运行。开发人员需要记住手动 运行 它。
b。转换的结果最终出现在主 "web.config" 文件中,该文件自然包含在源代码管理中。
正确答案是将本地开发站点托管在与 Visual Studio 解决方案不同的位置。然后,您可以使用 publish profiles to publish changes to that location and web.config transforms 为每个开发人员维护一个单独的本地配置。每个开发人员都将使用不同的发布配置文件,该配置文件使用他们自己的转换来转换 web.config,并将转换后的 web.config 部署到发布位置。然后,您可以使用 Visual Studio 的“调试”>“附加到进程”选项将调试器附加到已发布的站点。
我认为标准化开发环境有很多价值,这样人们就可以下载解决方案并 运行 它。
自定义,长 term/permanent,开发人员特定的配置迟早会导致难以发现的细微错误。
我对您问题的解决方案是找出需要永久性个人配置的原因,并查看是否可以消除这些环境特定差异。
让 web.config 包含一个外部文件(通过 configSource
)并将该文件添加到 .gitignore
我们有一个非常相似的问题,但只需要 Web.config 中
在这种情况下,通过 configSource
包含外部文件被证明是有问题的,因为此属性完全 替换
我们需要的是全局和私有file
属性。它允许合并 Web.config 设置与来自附加文件的设置。
我们最终得到了这样一个结构:
<!-- Web.config with global appSettings) -->
...
<appSettings file="Web.PERSONAL.config">
<add key="BaseUrl" value="https://projectname.dev.local" />
...
</appSettings>
...
<!-- Web.PERSONAL.config with personal appSettings -->
<?xml version="1.0" encoding="utf-8"?>
<appSettings >
<add key="EmailSmtpUser" value="my.name@my.domain.com" />
<add key="EmailSmtpPwd" value="***" />
</appSettings >
如果您在两个文件中放置相同的密钥,Web.PERSONAL.config 版本将覆盖 Web.config 版本.
文件 Web.PERSONAL.config 必须通过 .gitignore 从 Git 中排除。
切记:
虽然 configSource
适用于 Web.config 中的所有节点,但 file
属性仅限于