2

次のようなリピーターで Eval を使用する ascx があります。

<%@ Control Language="VB" AutoEventWireup="false" CodeFile="Similar.ascx.vb" Inherits="x.y.z.Similar" %>
<asp:repeater runat="server" id="rptAlternatives" visible="false" Enableviewstate="false">
    <HeaderTemplate>
        <section id="similar" class="sidelist sideModule">
            <h3>Possible Alternatives:</h3> 
            <ul class="sideborder">
    </HeaderTemplate>
    <ItemTemplate>
        <li>
            <a href="/bar/<%# Eval("URL")%>" class="box">foo</a>
        </li>
    </ItemTemplate>
    <FooterTemplate>
            </ul>
        </section>
    </FooterTemplate>
</asp:repeater>

これは私の開発用 PC では問題なく動作しますが、ライブ サーバーに展開すると失敗して、次のように言わCompiler Error Message: BC30451: 'Eval' is not declared. It may be inaccessible due to its protection level.れます。また、を使用するすべてのページで壊れているわけではありませんEval

ローカル環境は IIS 7.5.7600.16385 で、アプリケーション プールは ASP.NET v4.0 Classic を実行しています。サーバー環境は同じです。自分のマシンで VS から公開し、これをライブ サーバーにコピーしてデプロイします。

この展開の前に、ライブ サイトは v2.0 を使用していました。サイトを v4.0 にアップグレードすることは、リリースしようとしている変更の一部です。このコードは、このリリースの一部として変更されていません。常に Eval を使用しており、これは常に問題ありません。

Visual Studio 11 ベータ版をインストールしましたが、このプロジェクトでは 2010 を使用しています。

これを引き起こしている可能性のあるアイデアはありますか?

編集:

この専門家の交換投稿は、まったく同じ動作を説明しているようです。彼らは、ascx ファイルと ascx.vb ファイルの両方でクラスの名前を変更することで、この問題を「修正」しました。それらは変更前と変更後に一致しましたが、変更により明らかにコンパイラが何かを動かしました。これを試してみるかもしれませんが、特定の ascx が機能しなくなるだけでは満足できないようです。

に変更することを提案する投稿もたくさん見つかりましたDataBinder.Eval(Container.DataItem, "URL")。ただし、コードが以前は機能していて突然停止した場合、これを行うのは気が進まない. これは、私が使いたくない魔法のランダムな「修正」です。

4

2 に答える 2

0

重要な詳細は、v2.0からv4.0に更新しており、以前の展開の上にファイルをコピーしていたことであることが判明しました。

以前の展開のサーバーのbinディレクトリには、v2.0でプリコンパイルされたWebサイトDLLがまだありました。プリコンパイルされたDLL名はリリース間で変更されるため、古いものは置き換えられませんでした。どういうわけか、同じディレクトリにv2.0とv4.0のDLLがあると、サーバーが混乱していました。開発マシンにこれらの古いDLLがなかったため、同じ問題は発生しませんでした。

古いDLLを削除すると、問題が修正されました。

于 2012-07-03T09:35:08.807 に答える