2013-01-09 15 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; 
    };