2013-01-09 67 views
0

我试图实施this workaround的问题,因为RazorEngine不能在Razor 2.0应用程序中部署,因为它依赖于不兼容的Razor 1.0。Asp.net不应用dependentAssembly/codeBase提示

我所做的是在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> 

自Fusion组件装载日志输出System.Web.Razor 1.0.0.0:

LOG:用户= NT AUTHORITY \ SYSTEM LOG:DisplayName的= 系统.Web.Razor,版本= 1.0.0.0,文化=中性 公钥= 31bf3856ad364e35(完全指定的)

LOG:应用平台=文件:/// C:/应用/ LR2 /网络/弧/

LOG:初始PrivatePath = C:\ APPS \ LR2 \网络\弧\ BIN

日志:动态基= C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET 文件\ ROOT \ a63cc915

日志:缓存基= C:\ WINDOWS \ Microsoft.NET \框架\ v4.0.30319 \临时ASP.NET 文件\ ROOT \ a63cc915

LOG:AppName的= 98966cc9

Calli ng汇编:RazorEngine,Version = 3.0.8.0,Culture = neutral, PublicKeyToken = 9ee697374c7e744a。

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

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

LOG:使用主机配置文件: C:\ WINDOWS \ Microsoft.NET \框架\ V4 .0.30319 \ aspnet.config

LOG:使用来自 的计算机配置文件C:\ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ config \ machine.config。

LOG:后政策参考:System.Web.Razor,版本= 1.0.0.0, 文化=中性公钥= 31bf3856ad364e35

LOG:GAC查找不成功。

LOG:尝试新的URL 文件下载:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET文件/根/ a63cc915/98966cc9/System.Web.Razor .DLL。

LOG:尝试新的URL 文件下载:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/根/ a63cc915/98966cc9/System.Web程序。剃刀/ System.Web.Razor.DLL。
日志:试图下载新的URL file:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor.DLL。

日志:试图下载新的URL file:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.DLL。

LOG:尝试新的URL 文件下载:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET文件/根/ a63cc915/98966cc9/System.Web.Razor 。可执行程序。

LOG:尝试新的URL 文件下载:/// C:/Windows/Microsoft.NET/Framework/v4.0.30319/Temporary ASP.NET 文件/根/ a63cc915/98966cc9/System.Web程序。剃刀/ System.Web.Razor.EXE。

日志:试图下载新的URL file:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor.EXE。

日志:试图下载新的URL file:/// C:/apps/lr2/web/arcs/bin/System.Web.Razor/System.Web.Razor.EXE。

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

任何想法为什么Asp.net永远不会试图挖入bin \ 1.0?

我没有检查machine.config,并没有冲突的assemblyBinding的迹象。

感谢帮助!

回答

-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; 
    };