0

互換性のない Razor 1.0 に依存しているため、RazorEngine を Razor 2.0 アプリケーションにデプロイできないという問題に対して、この回避策を実装しようとしています。

私が行ったことは、bin フォルダーに 1.0 と 2.0 の 2 つのディレクトリを作成し、それぞれの System.Web.Razor.dll ファイルをそれぞれに配置することです。次に、依存アセンブリ/コードベースのヒントを web.config に追加して、アセンブリ ローダーを正しい方向に向けました。

ただし、System.Web.Razor アセンブリに適用した codeBase オーバーライドを Asp.net に反映させることはできないようです。その結果、RazorEngine で使用するために System.Web.Razor 1.0.0.0 を読み込むことができません。

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、バージョン = 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

ログ: アプリ名 = 98966cc9

アセンブリの呼び出し: RazorEngine、Version=3.0.8.0、Culture=neutral、PublicKeyToken=9ee697374c7e744a。

ログ: このバインドはデフォルトのロード コンテキストで開始されます。

ログ: アプリケーション構成ファイルの使用: C:\apps\lr2\web\arcs\web.config

ログ: ホスト構成ファイルの使用: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet.config

ログ: C:\Windows\Microsoft.NET\Framework\v4.0.30319\config\machine.config のマシン構成ファイルを使用しています。

ログ: ポリシー後の参照: System.Web.Razor、Version=1.0.0.0、Culture=neutral、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 に答える