1

IIS には、Web サイト用の仮想ディレクトリがあり、ポート 87 にあり、sites\MySiteName\. を指すサイト内の仮想サブディレクトリもありますsites\otherSite\otherControls

websites.sln以下は、私の Web サイトを含むソリューション ファイルからの抜粋です。

"Project("{E24C65DC-7377-472B-9ABA-BC803B73C61A}") = "MySiteName", "http://localhost:87", "{5B52E21D-C089-4DCD-A7CA-8B0B70D43544}"
    ProjectSection(WebsiteProperties) = preProject
        UseIISExpress = "false"
        TargetFrameworkMoniker = ".NETFramework,Version%3Dv4.0"
        Debug.AspNetCompiler.VirtualPath = "/LM/W3SVC/2"
        Debug.AspNetCompiler.TargetPath = "PrecompiledWeb\MySiteName\"
        Debug.AspNetCompiler.PhysicalPath = "..\..\..\Sites\MySiteName\"
        Debug.AspNetCompiler.Updateable = "true"
        Debug.AspNetCompiler.ForceOverwrite = "true"
        Debug.AspNetCompiler.FixedNames = "true"
        Debug.AspNetCompiler.Debug = "True"
        SlnRelativePath = "..\..\..\Sites\MySiteName\"

これは、実際にサイトにアクセスしているときにうまく機能します。プロジェクトwebsites.sln(私のサイトを含む) で msbuild を実行すると、忠実にメタプロジェクトが作成され、ビルドが試行されます。仮想サブディレクトリ内のコントロールを参照するファイルを構築しようとするまで、すべてうまくいきます。

ASPPARSE: The file '/LM/W3SVC/2/otherControls/control.ascx' does not exist. in \LM\W3SVC\2\file.aspx

cognethos は、「ASP コンパイラーはルート フォルダーがマウントされている場所を認識するようになりましたが、物理フォルダーが指定されているため、そのフォルダー内のみを検索し、他の仮想フォルダーを検出しません」と示唆しています。

そこで推奨される解決策は、物理パスを除外することです。私がそれを行うと、それはもはや構築されていないように見えますMySiteNameが、代わりに、明らかに他のサイトの1つからの警告が表示されます.

物理パスと仮想パスの両方を省略して、代わりに MetabasePath を使用してみました。

Debug.AspNetCompiler.MetabasePath = "LM/W3SVC/2"

それは見込みのないエラーをもたらします

C:\BUILD\MySiteName.metaproj : error MSB3462: Either MetabasePath or VirtualPath must be specified.

私が与えた MetabasePath を認識しない理由は特に明確ではありません。msbuild の使用を完全にスキップしてaspnet_compiler、MetabasePath だけを使用してサイトを直接指定しようとしたところ、物理パスを削除したときと同じ問題が発生しました....他のサイトの 1 つを構築しているようです。

4

0 に答える 0