Wcf 编译错误,除非.svc文件在VS 2010中打开

Wcf 编译错误,除非.svc文件在VS 2010中打开,wcf,compiler-construction,vsto,Wcf,Compiler Construction,Vsto,对于VSTO中提供的一些web服务,我有一个非常简单的.svc文件(VSTOService.svc): <%@ ServiceHost Language="C#" Debug="true" Service="MyCompany.Communications.VSTOService" Factory = "MyProject.Communications.IocServiceHostFactory" CodeBehind="VSTOService.cs"%>

对于VSTO中提供的一些web服务,我有一个非常简单的.svc文件(VSTOService.svc):

<%@ ServiceHost Language="C#" 
    Debug="true" Service="MyCompany.Communications.VSTOService" 
    Factory = "MyProject.Communications.IocServiceHostFactory" 
    CodeBehind="VSTOService.cs"%>

此文件位于通信项目中,该项目是我的解决方案中的12个项目之一。只要 该文件在VS源代码编辑器中打开,整个解决方案可以很好地编译。但是,如果文件关闭,则会出现编译错误

当我自己编译通信项目时,我遇到了同样的问题,有两个编译错误: 逐字说明符后面应包含关键字、标识符或字符串:@
命名空间不能直接包含字段或方法等成员

显然,我没有在.svc文件中指定名称空间,但为了以防万一,我还检查了项目中的两个类。他们很好。我还试图删除@和“ServiceHost”之间的空格,但VS坚持在我保存文件时将其放回。(当软件/硬件给我口吻时,我恨它!)

那么,是什么导致了这种完全奇怪的行为呢?


<% @ServiceHost Language="C#" 
    Debug="true" Service="MyCompany.Communications.VSTOService" 
    Factory = "MyProject.Communications.IocServiceHostFactory" 
    CodeBehind="VSTOService.cs"%>

移动
@
使用ServiceHost作为
签名,确保在创建*.svc文件时不会创建*.svc.cs文件。如果有,请删除它并从@ServiceHost中删除CodeBehind属性。我看到我的svc文件如下

<%@ ServiceHost Language="C#" Debug="true" Service="MessageProcessor.Async" %>
<a href="Msg.svc">Msg.svc</a>

不知道锚标记是如何插入servicehost标记下方的,这是导致问题的原因。
删除锚标记()后,它修复了“名称空间不能直接包含字段或方法等成员”的问题。

谢谢您的回答。不幸的是,这也行不通。事实上,我必须跳过各种各样的障碍才能使用这种格式,因为VS2010重新格式化