我正在尝试实现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的迹象。
感谢帮助!
答案 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;
};