0

このアプリケーションでは、単純な aspx 構文を使用して、サーバーのバージョンなどを表示します。

<h1>Server Engine v<%=System.Reflection.Assembly.GetAssembly(typeof(Server.Engine)).GetName().Version %></h1>
// "Server Engine v3.6.1268.0"

VS 2010 および 2012 では問題なく動作しますが、VS 2013 ではソースを取得します。

<h1>Server Engine v   3.6.1268.0   </h1>

ブラウザーでは同じように見えますが、別の場所で aspx 構文を使用して Url を形成すると、結果の Url のパスにこれらの奇妙な記号が含まれます。コードは次のとおりです。

var folderUrl = window.location.protocol + '//' + window.location.hostname + ':' + port + '<%=Request.ApplicationPath.TrimEnd('/')%>/';

ソースの結果:

var folderUrl = window.location.protocol + '//' + window.location.hostname + ':' + port + '     /';

同じプロジェクトが VS2012 から問題なく動作します。この問題が発生する理由と、この問題を回避する方法を教えてください。

アップデート1:

ここで、これらの奇妙なシンボルを HEX ビューで表示します:

00000002E0: 3A 27 20 2B 20 70 6F 72 │ 74 20 2B 20 27 EF BB BF  :' + port + 'п»ї
00000002F0: EF BB BF EF BB BF EF BB │ BF EF BB BF 2F 27 3B 0A  п»їп»їп»їп»ї/';◙

更新 2:

追加した:

<%=System.Diagnostics.Process.GetCurrentProcess().MainModule.FileVersionInfo %>

現在の IIS バージョンを検出します。結果は、VS2012 と VS2013 の両方で同じです。

File: C:\Program Files (x86)\IIS Express\iisexpress.exe InternalName: iisexpress.exe OriginalFilename: iisexpress.exe.mui FileVersion: 8.0.8418.0 (winmain(eokim).120521-1311) FileDescription: IIS Express Worker Process Product: Internet Information Services ProductVersion: 8.0.8418.0 Debug: False Patched: False PreRelease: False PrivateBuild: True SpecialBuild: False Language: Language Neutral

「変更」を選択した場合にのみ問題を再現できます

Web.config を変更する提案

アップデート5:

簡単な再現例を次に示します。

using System.Web;
using System.Web.UI;

namespace WebApplication2
{
public class DavHandler : IHttpHandler
{
    public bool IsReusable
    {
        get { return true; }
    }

    public void ProcessRequest(HttpContext context)
    {
        context.Response.BufferOutput = false;

        Page page = (Page)System.Web.Compilation.BuildManager.CreateInstanceFromVirtualPath(
            "~/MyCustomHandlerPage.aspx", typeof(Page));
        page.ProcessRequest(HttpContext.Current);
    }
}
}

MyCustomHandlerPage.aspx :

<%@ Page Title="WebDAV" Language="C#" AutoEventWireup="true"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
  <head>
    <title>IT Hit WebDAV Server Engine</title><meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    <style type="text/css">
        body { font-family: Verdana; font-size:smaller; }
        li { padding-bottom: 7px; }
        input {width: 250px}
    </style>
</head>
<body>

    <p>"<%="TEST" %>"</p>

</body>
</html>

Web.config:

<?xml version="1.0"?>
<configuration>

  <appSettings>
    <add key="RepositoryPath" value="~/App_Data/WebDAV/Storage"/>
  </appSettings>

  <system.web>
    <customErrors mode="Off"/>
    <authentication mode="None"/>
    <authorization>
      <allow users="*"/>
    </authorization>
    <globalization requestEncoding="utf-8" responseEncoding="utf-8"/>
    <compilation targetFramework="4.0" debug="true"/>
  </system.web>

  <system.webServer>

  <handlers>
    <clear />
    <add name="My WebDAV Handler" path="*" verb="*" type="WebApplication2.DavHandler, WebApplication2" preCondition="integratedMode" />
  </handlers>

  </system.webServer>

</configuration>

この例を Visual Studio 2013 から Internet Explorer で実行し、結果ページのソースを見ると、次のように表示されます。

<p>"   TEST   "</p>

次に、ページをファイルとして保存し、HEX ビューアーで調べることができます。これらのバイト オーダー マーク「EF BB BF」が挿入されていることがわかります。ただし、他の Visual Studio バージョンではそうではありません。

アップデート6:

この問題は、プロジェクトが VS 2013 で debug="true" モードで作成された場合に発生します。VS2010/2012 からこのプロジェクトを開くと、同じ問題が発生します。しかし、プロジェクトが VS2010/2012 で作成された場合、問題はありません。

4

0 に答える 0