视觉 Studio/IIS 表达间歇性错误

Visual Studio/IIS Express Intermittent Bugs

自从我们在项目中停止使用常规 IIS 以来,过去几年我一直在使用 IIS Express 时遇到问题。我们通常有包含 Web 服务和某种客户端(Web、桌面或两者)的解决方案。当我 运行 客户端每 10 次约有 1 次时,我会收到有关找不到 localhost:blahblah 或无法加载程序集的错误。完全重建总能解决这个问题。然而,这是我和我的同事在 VS2013 和 VS2015 中处理过的事情。我想出了一个解决方法,我添加了一个预构建事件来删除 Web 服务的 bin 文件夹,并在其上执行和 msbuild。这在我的机器上效果很好。但是,我不知道如何在我们的构建服务器或其他人的机器上工作的地方编写它。预构建事件作为 cs.proj 文件的一部分被签入源代码管理,因此如果我走那条路,我需要一个通用的解决方案。这是我的预构建脚本:

DEL /Q "C:\TFS\Enterprise Data Management\Vendor\Dev-Phase2US\WcfService\bin\*.*"
"C:\Program Files (x86)\MSBuild.0\Bin\MSBuild.exe" "C:\TFS\Enterprise Data Management\Vendor\Dev-Phase2US\WcfService\WcfService.csproj"

有没有人遇到过类似的问题?有什么好的解决方案或解决方法吗?

你能为你的项目尝试这个替代设置吗?右键单击您的 Web 项目。 Select 属性,然后 Select Web 选项卡。如下配置您的 Visual Studio。

同样右击项目Select设置为启动项目如下

然后最后右击主页,例如或者您希望首先启动的页面,例如index.html,并设置为起始页如下

如果您在同一个解决方案中同时拥有控制台应用程序和 Web 应用程序,请直接尝试解决方案。 Select 属性并将启动项目设置为多个启动项目,如下所示

在回答所提出的问题时,要使用 "generic" 路径,请使用 Visual Studio 中提供的 "Macros"(技术上,MSBuild 属性)。假设WcfService文件夹在同一个解决方案中,

DEL /Q "$(SolutionDir)\WcfService\bin\*.*"

或者如果它在相对于项目的某个路径中,

DEL /Q "$(ProjectDir)..\..\..\WcfService\bin\*.*"

请注意,为此使用预构建事件是非常糟糕的做法。最好在项目中使用 Clean 任务,例如通过将其添加到您的 .csproj(在根元素下,例如 </Project> 之前):

  <Target Name="CleanWcfProject" BeforeTargets="PrepareForBuild">
    <MSBuild Projects="$(SolutionDir)\WcfService\WcfService.csproj" Targets="Clean" Properties="Configuration=$(Configuration);Platform=$(Platform)" />
  </Target>

我不确定你为什么在 WcfService.csproj 项目上 运行 MSBuild,因为你可以简单地将它添加为项目引用(右键单击 > 添加引用 > 解决方案) ,这将导致 MSBuild 在看到项目的输出被清除后自动构建项目。

如果你的依赖项目在另一个解决方案中

如果是这种情况,那么 Clean 应该使用相对路径,但添加 ProjectReference 可能不是 desirable/possible(您仍然可以将依赖项添加到您的解决方案中,即使它在另一个解决方案中,但通常这不是 possible/feasible,因为有很多其他依赖项)。

如果是这样,那么只需添加构建目标即可,

  <Target Name="CleanWcfProject" BeforeTargets="PrepareForBuild">
    <MSBuild Projects="$(ProjectDir)..\..\..\WcfService\WcfService.csproj" Targets="Clean;Build" Properties="Configuration=$(Configuration);Platform=$(Platform)" />

  </Target>

非常感谢 Al-Muhandis 让我走上了正确的轨道。总之,重建 WCF 服务项目可以 100% 地解决我的问题。我最初的问题中的预构建事件是一种非常老套的方法。一个简单的清理是不够的,因为我只用一个清理就得到了这个错误:

The requested service, 'http://localhost:53934/EdmVendService/EdmVendor.svc' could not be activated. See the server's diagnostic trace logs for more information.

我最终的解决方案是将这个 XML 块添加到 csproj 文件中。我只是用记事本编辑它。

<Target Name="RebuildWcfProject" BeforeTargets="PrepareForBuild">
  <MSBuild Projects="$(SolutionDir)\WcfService\WcfService.csproj" Targets="Rebuild" Properties="Configuration=$(Configuration);Platform=$(Platform)" />
</Target>

这是我更改后的 csproj 文件的底部。

希望这可能对其他人有所帮助。