重命名的网站,Web.Config,Log4Net,使用 IIS Express,使用 Git 版本控制,在 VS2015 中,失败

A Renamed WebSite, Web.Config, Log4Net, using IIS Express, using Git version control, in VS2015, failing

所以这是一个非常可笑的错误并且很难追踪,所以我将把所有内容都放在这里以防其他人发生;

在制作网站时,它的名称发生了变化。我注意到 IISExpress 实例不仅显示新名称,而且显示“\”和旧名称作为三个单独的实例。

当我尝试将 log4net 添加到项目中时,我尝试在 web.config:

中使用这一行

<log4net configSource="log4net.config" />

导致应用 运行 出现以下错误:

the configSource file '[file]' is also used in a parent, this is not allowed.

configSource 文件也用在父级中,这是不允许的。

这很令人困惑,因为我没有在其他任何地方使用过这个源,而且无论我将它更改为什么文件,我都会遇到同样的错误。

log4Net 在我完全在我的 web.config 中定义时工作正常,但这不是我想要的,所以我进一步调查。有趣的是,一位刚加入该项目的同事可以 运行 使用分离的配置可以很好地应用程序,但我和另一个已经在这个项目上工作了一段时间的开发人员却做不到。

我和另一位具有完全相同设置的同事如何拥有一个失败的应用程序,而该应用程序的配置与具有新结帐功能的人相同,但它可以正常工作?

web.config 文件是 "composed" 当应用程序通过扫描文件系统从当前目录到驱动器根目录并在许多预定义的地方查找时读取它(例如 Machine.Config 和默认 ASP.NET 配置的位置。)如果您在 IIS 中的同一网站上使用虚拟目录,事情会变得更加有趣。

这些文件中的任何一个都可以定义配置部分并可能将配置外部化,从而导致您看到的错误消息。

MSDN 上的以下文档准确地概述了如何解析和组合配置:

事实证明,IISExpress 已将之前的设置保存在解决方案根级别的 .vs 文件夹中,并且所有三个实例都使用相同的配置,并寻找相同的文件,因此错误。

解决方案如下:

  1. 在网络应用的项目中,重置网络属性以查看根站点(\ 而不是 \newname\
  2. 删除整个 .vs 目录
  3. 重新启动 Visual Studio 并重新加载项目。

对于不同版本的 VS,.vs 文件夹位于您计算机上的不同位置。