尝试让 IIS 在 VM 中运行,让 Visual Studio 在本机运行,并将文件放在本机文件系统上

尝试让 IIS 在 VM 中运行,让 Visual Studio 在本机运行,并将文件放在本机文件系统上

这是我正在尝试进行的设置。

  1. Windows 7,其“ASP.NET Web 应用程序”的文件(向导为本次测试创建的新文件)安装在 c:\tfsprojects\test\test 中,该项目可以在 Visual Studio 2010 中正常打开和构建。

  2. Windows Server 2003,在 VMWare Workstation 8 中运行。

  3. VMWare 有一个映射,因此本机文件系统 c:\tfsprojects 在虚拟机内显示为 \vmware-host\Shared Folders\tfsprojects

  4. VM 内的 IIS,设置为在 80 上运行来自 \vmware-host\Shared Folders\tfsprojects\test 的默认网站

问题是,当我访问http://localhost/测试(在虚拟机内部)我收到以下错误:

[HttpException (0x80070001): Failed to start monitoring changes to '\\vmware-host\Shared Folders\tfsprojects\test\'.]
   System.Web.DirMonCompletion..ctor(DirectoryMonitor dirMon, String dir, Boolean watchSubtree, UInt32 notifyFilter) +139
   System.Web.DirectoryMonitor.StartMonitoring() +42
   System.Web.DirectoryMonitor.StartMonitoringFile(String file, FileChangeEventHandler <snip>

[HttpException (0x80004005): ASP.NET 初始化错误] System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +982 System.Web.HttpRuntime.ProcessRequestInternal(HttpWorkerRequest wr) +128

--

我已经将 c:\tfsprojects 目录设置为对“所有人”具有完全权限,并明确添加了域匿名用户的权限(并将 IIS 设置为在目录安全选项卡下使用该用户名进行匿名权限)。

--

有什么想法吗?这个让我完全不知所措。出于各种原因,我似乎无法用其他方式做到这一点。非常感谢任何帮助。

答案1

看起来此设置使用的任何内容(SMB?不是 WS8 用户...)将驱动器映射到 vmware 中,其实现的一些文件系统 API 太不完整,以至于 IIS 无法使用它。建议您将实时文件系统保留在 VM 中,并将其通过 SMB 安装到主机上。

答案2

一个技巧可能是禁用开发 Web 服务器的文件监视功能。通常,ASP.NET 会监视更改,并在发生更改时重新启动应用程序池。不过,有一个注册表设置可以禁用此功能。这可能会导致启动过程中出现更具描述性的错误。

您可以将注册表项 FCNMode 设置为 1 以禁用监控:

http://support.microsoft.com/kb/911272

HKLM\软件\微软\ASP.NET\FCNMode

或者如果在 64 位 Windows 上运行 32 位应用程序池:

HKLM\SOFTWARE\Wow6432Node\Microsoft\ASP.NET\FCNMode

您可能需要运行 SysInternal 的进程监视器来确定正在访问哪些文件/文件夹会导致错误。例如,它可能正在尝试访问 C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files,而您的应用程序身份需要该文件夹的权限。

如果不是文件系统权限,则可能是由于 .NET 的代码访问安全 (CAS) 功能。它可能不知道如何处理 VMWare 映射的资源。您可能需要尝试为位置输入例外。如果这不起作用,您可能需要尝试使用 SMB 映射驱动器到主机的网络地址,而不是使用 VMWare 网络。

CD /D C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727  
caspol.exe -m -ag 1 -url "file://\\vmware-host\*" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "file://L:/TFSProjects" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "http://localhost/*" FullTrust -exclusive on  

CD /D C:\WINDOWS\Microsoft.NET\Framework64\v2.0.50727 
caspol.exe -m -ag 1 -url "file://\\vmware-host\*" FullTrust -exclusive on 
caspol.exe -m -ag 1 -url "file://L:/TFSProjects" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "http://localhost/*" FullTrust -exclusive on  

CD /D C:\WINDOWS\Microsoft.NET\Framework\v4.0.30319   
caspol.exe -m -ag 1 -url "file://\\vmware-host\*" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "file://L:/TFSProjects" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "http://localhost/*" FullTrust -exclusive on  

CD /D C:\WINDOWS\Microsoft.NET\Framework64\v4.0.30319   
caspol.exe -m -ag 1 -url "file://\\vmware-host\*" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "file://L:/TFSProjects" FullTrust -exclusive on
caspol.exe -m -ag 1 -url "http://localhost/*" FullTrust -exclusive on  


REM display the exceptions
caspol -lf 

相关内容