c# - Visual Studio/IIS Express 间歇性错误

标签 c# visual-studio msbuild iis-express

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

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

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

最佳答案

在回答所提出的问题时,要使用“通用”路径,请使用 Visual Studio 中提供的“宏”(从技术上讲,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 可能不是理想的/不可能的(您仍然可以将依赖项添加到您的解决方案中,即使它在另一个解决方案中,但通常这由于许多其他依赖项,这是不可能/不可行的)。

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

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

  </Target>

关于c# - Visual Studio/IIS Express 间歇性错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35201548/

相关文章:

c# - 确定另一个进程中的 UI 线程

visual-studio - 如何更改 visual studio 中的默认网站图标?

visual-studio-2010 - 没有 Visual Studio 的 MS 单元测试框架

visual-studio - 在 MSBuild 中使用 Studio 的 "Custom Tool"

msbuild - .nu​​spec 文件中的 Packages.config 与 Dependency 部分

c# - 在编译代码中实现电子表格功能(自动更新变量)

c# - 使用 SQL 身份验证处理连接字符串

c# - 你如何在 C# 中传递字符串?

visual-studio - 为什么 MSDN 或 VS2015 不使用 __stdcall 约定声明 IUnknown 方法?

c++ - 独立 Exe 的 Visual Studio 静态链接