Asp.net没有应用dependentAssembly / codeBase提示

时间:2013-01-09 17:25:32

标签: c# asp.net .net assembly-loading

我正在尝试实现this workaround以解决RazorEngine无法在Razor 2.0应用程序中部署的问题,因为它依赖于不兼容的Razor 1.0。

我所做的是在bin文件夹中创建两个目录:1.0和2.0,并将各自的System.Web.Razor.dll文件放入每个目录中。然后我将dependentAssembly / codeBase提示添加到web.config以指向正确方向的程序集加载程序。

但是,我似乎无法让Asp.net尊重我已申请System.Web.Razor程序集的codeBase覆盖。结果是无法加载System.Web.Razor 1.0.0.0以供RazorEngine使用。

的Web.config

<configuration>
    <runtime xmlns="">
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="System.Web.Razor" publicKeyToken="31bf3856ad364e35" culture="neutral" />
                <codeBase version="1.0.0.0" href="file://c:\apps\lr2\web\arcs\bin\1.0\System.Web.Razor.dll" />
                <codeBase version="2.0.0.0" href="file://c:\apps\lr2\web\arcs\bin\2.0\System.Web.Razor.dll" />
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

System.Web.Razor 1.0.0.0的Fusion程序集加载日志的输出:

  

日志:用户= NT AUTHORITY \ SYSTEM日志:DisplayName =   System.Web.Razor,Version = 1.0.0.0,Culture = neutral,   PublicKeyToken = 31bf3856ad364e35(完全指定)

     

日志:Appbase = file:/// C:/ apps / lr2 / web / arcs /

     

日志:初始PrivatePath = C:\ apps \ lr2 \ web \ arcs \ bin

     

日志:动态基地=   C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET   文件\根\ a63cc915

     

日志:缓存基数=   C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Temporary ASP.NET   文件\根\ a63cc915

     

日志:AppName = 98966cc9

     

调用程序集:RazorEngine,Version = 3.0.8.0,Culture = neutral,   公钥= 9ee697374c7e744a。

     

日志:此绑定在默认加载上下文中启动。

     

日志:使用应用程序配置文件:   C:\应用\ LR2 \网络\弧\ web.config中

     

日志:使用主机配置文件:   C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ aspnet.config

     

日志:使用来自的机器配置文件   C:\的Windows \ Microsoft.NET \框架\ v4.0.30319 \ CONFIG \ machine.config中

。      

日志:策略后引用:System.Web.Razor,Version = 1.0.0.0,   Culture = neutral,PublicKeyToken = 31bf3856ad364e35

     

日志:GAC查询失败。

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary   ASP.NET Files / root / a63cc915 / 98966cc9 / System.Web.Razor.DLL。

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary   ASP.NET   文件/根/ a63cc915 / 98966cc9 / System.Web.Razor / System.Web.Razor.DLL。
  日志:尝试下载新网址   文件:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor.DLL

     

日志:尝试下载新网址   文件:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.DLL

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary   ASP.NET Files / root / a63cc915 / 98966cc9 / System.Web.Razor.EXE。

     

日志:尝试下载新网址   文件:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary   ASP.NET   文件/根/ a63cc915 / 98966cc9 / System.Web.Razor / System.Web.Razor.EXE。

     

日志:尝试下载新网址   文件:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor.EXE

     

日志:尝试下载新网址   文件:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.EXE

     

日志:所有探测网址都已尝试失败。

任何想法为什么Asp.net从未试图深入研究bin \ 1.0?

我确实检查了machine.config,并且没有任何冲突的assemblyBinding的迹象。

感谢帮助!

1 个答案:

答案 0 :(得分:-1)

我通过使用AppDomain.CurrentDomain.AssemblyResolve事件来解决这个问题。

    System.AppDomain.CurrentDomain.AssemblyResolve += (o, e) =>
    {
        if (e.Name == "System.Web.Razor, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35")
            return System.Reflection.Assembly.LoadFrom(Server.MapPath("~/bin/1.0/System.Web.Razor.dll"));

        return null;
    };