我有两个步骤来产生最终输出。
首先,我使用msbuild任务预编译WCF应用程序
<AspNetCompiler Debug="false" PhysicalPath="$(RootBuildDir)/DeploymentPackages/Helium" TargetPath="$(RootBuildDir)/Packages/theWCFProj" VirtualPath="/theWCFProj" ></AspNetCompiler>
此时,如果我在IIS中为生成的预编译Packages/theWCFProj
目录创建一个应用程序,那么一切似乎都有效。
然后我运行命令
<Exec Command='aspnet_merge "$(RootBuildDir)/Packages/theWCFProj" -o theWCFProj_aspnet' />
成功完成。
但是,在尝试加载.svc url或从WCF客户端调用它时,我收到以下错误:
Could not load file or assembly 'App_global.asax, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
然而,我可以看到.compiled文件正确指向合并的程序集,因为App_global.asax.compiled
包含:
<?xml version="1.0" encoding="utf-8"?>
<preserve resultType="8" virtualPath="/theWCFProj/global.asax" hash="ffffffff8d3606ab" filehash="ffffe951d4811dee" flags="150000" assembly="theWCFProj_aspnet" type="ASP.global_asax">
<filedeps>
<filedep name="/theWCFProj/global.asax" />
</filedeps>
</preserve>
WCF服务托管在IIS7中。
关于可能出现什么问题的任何想法?
答案 0 :(得分:0)
事实证明有人将旧版本的System.Query.dll直接添加到项目中,这会在预编译期间引发警告:
ASPNETCOMPILER : warning CS1685: The predefined type 'System.Runtime.CompilerServices.ExtensionAttribute' is defined in multiple assemblies in the global alias; using definition from 'c:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\theWCFProj\0fd01092
\ 7b51c9a \组件\ DL3 \ c17fdca3 \ 777377c3_17a6cc01 \ System.Query.DLL'
删除此.dll以及.csproj文件中对它的显式引用修复了问题。一旦这些预编译警告消失,WCF服务就不再存在访问App_global.asax的问题