在WCF应用程序上运行aspnet_merge后找不到App_global.asax

时间:2011-11-18 00:19:50

标签: asp.net .net iis-7 msbuild

我有两个步骤来产生最终输出。

首先,我使用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中。

关于可能出现什么问题的任何想法?

1 个答案:

答案 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的问题​​