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 つを構築しているようです。