1

Visual Studio 2012 の Web フォーム テンプレートから生成された ASP.NET サイトがあります。マスター ページに次のコードがあります。

<asp:PlaceHolder runat="server">
    <%: Styles.Render("~/Content/themes/base/css", "~/Content/css") %>
    <%: Scripts.Render("~/bundles/modernizr") %>
</asp:PlaceHolder>

VS からサイトを実行すると、すべて正常に動作します。サーバーにデプロイすると、上記のコードが次のように解決されるため、css ファイルをロードできません。

<link href="/Content/themes/base/css?v=UM624qf1uFt8dYtiIV9PCmYhsyeewBIwY4Ob0i8OdW81" rel="stylesheet" type="text/css" />
<link href="/Content/css?v=tMLDfv3u-lElLSOX_gsfU7tfsfKPoY_vJBePC7KLa6U1" rel="stylesheet" type="text/css" />
<script src="/bundles/modernizr?v=EuTZa4MRY0ZqCYpBXj_MhJfFJU2QBDf0xGrV_p1fHME1" type="text/javascript"></script>

すべてのパスはドメインのルートからカウントされますが、私のサイトはhttp://MyDomain.com/MySyte/. 明らかに、チルダ演算子~は正しく処理されません。href などの他のすべての場所では、適切に置き換えられ、展開されたサイトでナビゲーションが正常に機能します。

もう一つの例。マスターページからのこのコードについて

<asp:ScriptManager runat="server" AjaxFrameworkMode="Explicit">
    <Scripts>
        <asp:ScriptReference Name="MsAjaxBundle" />
        <asp:ScriptReference Name="jquery" />
        ...
    </Scripts>
</asp:ScriptManager>

私はこのhtml出力を持っています

<script src="/bundles/MsAjaxJs?v=eYkLZimNY09iWQvWpdPDkxCLGwdMBLWkJ4bU5r3y6GU1" type="text/javascript"></script>
<script src="Scripts/jquery-1.6.2.min.js" type="text/javascript"></script>

したがって、jquery へのパスは適切で相対パスですが、MsAjaxBundle は絶対パスになります。

この動作はバグだと思います。どうすれば回避できますか?

アップデート:

  • ウィンドウズ 7 x64
  • IIS7.5
  • ASP.NET アプリケーション ターゲット フレームワーク 4.5
  • IIS アプリケーション プール フレームワーク 4.0
4

3 に答える 3

1

http://MyDomain/MySite/この問題は、実際にに転送するプロキシサーバーが原因で発生しましたhttp://InternalDomain:InternalPort/。そして、その内部ドメインのアプリケーションルートは実際にはサイトルートでした。

于 2012-08-25T21:34:20.917 に答える
1

チルダは、アプリケーション ルートからの参照ポイントです。MySyteディレクトリは、Web サイトから離れた単なるフォルダーであり、アプリケーションとして構成されていない可能性があります。

IIS でディレクトリをアプリケーションとして構成する必要があります。IIS 7.x および 8 の場合、MySyte フォルダーを右クリックして [アプリケーションに変換] を選択し、適切な AppPool を選択します。

ここに画像の説明を入力

于 2012-08-20T13:47:06.870 に答える