0

我正在尝试针对 RazorEngine 无法在 Razor 2.0 应用程序中部署的问题实施此解决方法,因为它依赖于不兼容的 Razor 1.0。

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

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

网页配置

<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,版本 = 1.0.0.0,文化 = 中性,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 Files\root\a63cc915

日志:缓存基础 = C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\a63cc915

日志:AppName = 98966cc9

调用程序集:RazorEngine,版本=3.0.8.0,文化=中性,PublicKeyToken=9ee697374c7e744a。

LOG:此绑定在默认加载上下文中开始。

LOG:使用应用程序配置文件:C:\apps\lr2\web\arcs\web.config

LOG:使用主机配置文件:C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config

LOG:使用 C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config 中的机器配置文件。

日志:政策后参考:System.Web.Razor,版本=1.0.0.0,文化=中性,PublicKeyToken=31bf3856ad364e35

日志:GAC 查找不成功。

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

日志:尝试下载新 URL 文件:///C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET Files/root/a63cc915/98966cc9/System.Web.Razor/System.Web.Razor .DLL。
日志:正在尝试下载新的 URL 文件:///C:/apps/lr2/web/arcs/bin/System.Web.Razor.DLL。

日志:正在尝试下载新的 URL 文件:///C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.DLL。

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

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

日志:正在尝试下载新的 URL 文件:///C:/apps/lr2/web/arcs/bin/System.Web.Razor.EXE。

日志:正在尝试下载新的 URL 文件:///C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.EXE。

LOG:所有探测 URL 都已尝试并失败。

知道为什么 Asp.net 从不尝试深入 bin\1.0 吗?

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

感谢帮助!

4

1 回答 1

-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;
    };
于 2013-01-10T14:50:32.433 回答