Visual Studio / IIS Express间歇性错误

时间:2016-02-04 12:53:45

标签: c# visual-studio msbuild iis-express

自从我们停止在项目中使用常规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\14.0\Bin\MSBuild.exe" "C:\TFS\Enterprise Data Management\Vendor\Dev-Phase2US\WcfService\WcfService.csproj"

还有其他人有过类似的问题吗?任何好的解决方案或解决方法?

4 个答案:

答案 0 :(得分:4)

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

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

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

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

请注意,使用Pre-Build事件是非常糟糕的做法。最好在项目中使用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,因为您只需将其添加为项目参考(右键单击&gt;添加参考&gt;解决方案),会导致MSBuild在看到其输出被清除后自动构建项目。

如果您的相关项目位于其他解决方案中

如果是这种情况,那么Clean应该使用相对路径,但添加ProjectReference可能不合适/可能(您仍然可以将依赖项添加到您的解决方案中,即使它在另一个解决方案中也是如此) ,但由于许多其他依赖性,这通常不可行/不可行。)

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

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

  </Target>

答案 1 :(得分:3)

非常感谢Al-Muhandis让我走上正轨。总之,WCF服务项目的重建在100%的时间内解决了我的问题。我最初的问题中的预构建事件是一种非常黑客的方式。一个简单的清洁是不够的,因为我只用一个清洁得到这个错误:

  

请求的服务,&#39; http://localhost:53934/EdmVendService/EdmVendor.svc&#39;无法激活。有关详细信息,请参阅服务器的诊断跟踪日志。

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

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

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

enter image description here

希望这对其他人有帮助。

答案 2 :(得分:1)

您可以为项目尝试此备用设置吗?右键单击您的Web项目。选择“属性”,然后选择“Web”选项卡。按如下所示配置Visual Studio。

enter image description here

同样右键单击项目并选择设置为启动项目,如下所示 enter image description here

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

enter image description here

答案 3 :(得分:1)

如果您在同一解决方案中同时拥有控制台应用和网络应用,请尝试使用解决方案。选择属性并将启动项目设置为多个启动项目,如下所示

enter image description here