6

这种情况最近才开始突然发生。我尝试了在 Stack 和其他论坛上可以找到的所有解决方案,但到目前为止都没有奏效。

当我尝试开始调试 Azure 辅助角色时,这是我得到的:

在此处输入图像描述

调试窗口显示:The program '[2208] WaIISHost.exe' has exited with code 0 (0x0).

我在管理模式下运行 Visual Studio,将正确的项目设置为启动并使用 IIS Express 作为开发服务器。

我尝试使用相同的基础项目创建一个新的 Azure 辅助角色,但没有成功。系统事件日志没有任何信息。我尝试重新安装 VS2015 并单独安装 Azure SDK (v.2.7.1),没有任何变化。当我查看计算模拟器时,在它消失之前它说:

[fabric] Role Instance: deployment27(250).Web.0
[fabric] Role state Unhealthy
[fabric] Role state Stopped

但是,我能够在解决方案中启动其他工作人员角色项目,这让我相信项目中一定有某些东西已经损坏,以某种方式与损坏的工作人员角色相关联。在这个阶段我没有想法,所以非常感谢任何帮助。

更新

查看WallSHost.log里面的文件C:\Users\<UserAccount>\AppData\Local\dftmp\Resources\<GUID>\directory\DiagnosticStore给我一个Invalid name错误:

WaIISHost Information: 0 : [00003568:00000001, 2015-10-06 20:02:05.472, INFO ] Attempt Deploy with RoleInstanceId=deployment27(252).Web_IN_0 RoleRoot=C:\Web\csx\Debug\roles\Web\ optional SitesDestination=
WaIISHost Information: 0 : [00003568:00000001, 2015-10-06 20:02:08.153, ERROR] Exception:System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Invalid name.
Parameter name: name (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.ArgumentException: Invalid name.
Parameter name: name
   at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
   at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
   at System.Security.AccessControl.DirectorySecurity..ctor(String name, AccessControlSections includeSections)
   at System.IO.DirectoryInfo.GetAccessControl(AccessControlSections includeSections)
   at Microsoft.WindowsAzure.ServiceRuntime.IISConfigurator.FileManager.AddAllowAceIterative(DirectoryInfo dir, FileSystemRights rights, IdentityReference[] accounts)
   at Microsoft.WindowsAzure.ServiceRuntime.IISConfigurato...).


WaIISHost Information: 0 : [00003568:00000001, 2015-10-06 20:02:08.157, ERROR] Exception:System.ServiceModel.FaultException`1[System.ServiceModel.ExceptionDetail]: Invalid name.
Parameter name: name (Fault Detail is equal to An ExceptionDetail, likely created by IncludeExceptionDetailInFaults=true, whose value is:
System.ArgumentException: Invalid name.
Parameter name: name
   at System.Security.AccessControl.NativeObjectSecurity.CreateInternal(ResourceType resourceType, Boolean isContainer, String name, SafeHandle handle, AccessControlSections includeSections, Boolean createByName, ExceptionFromErrorCode exceptionFromErrorCode, Object exceptionContext)
   at System.Security.AccessControl.FileSystemSecurity..ctor(Boolean isContainer, String name, AccessControlSections includeSections, Boolean isDirectory)
   at System.Security.AccessControl.DirectorySecurity..ctor(String name, AccessControlSections includeSections)
   at System.IO.DirectoryInfo.GetAccessControl(AccessControlSections includeSections)
   at Microsoft.WindowsAzure.ServiceRuntime.IISConfigurator.FileManager.AddAllowAceIterative(DirectoryInfo dir, FileSystemRights rights, IdentityReference[] accounts)
   at Microsoft.WindowsAzure.ServiceRuntime.IISConfigurato...).
4

1 回答 1

13

在重新安装 Visual Studios、Azure SDK、IIS 并通过日志文件处理后,我终于找到了问题:node_modulesWeb 项目中与我的辅助角色相关联的文件夹。

删除文件夹后,立即开始调试;即使它不是 Visual Studios 解决方案的一部分。

从那以后,我在 Stack 上搜索了这个特定问题并找到了这篇文章: https ://stackoverflow.com/a/28188299/654708

添加rmdir /s /q "$(ProjectDir)node_modules\"到与辅助角色关联的项目属性中的构建后事件,将node_modules在 Azure 调试器启动之前删除该文件夹。这不是一个完美的解决方案,但它会在解决这个 Windows 无法处理长文件名的荒谬问题之前解决。

在此处输入图像描述

更新

刚刚找到更好的解决方案。在此处使用 Microsoft 开发团队的模块更新npm到 >= 3.x :npm-windows-upgrade

https://www.npmjs.com/package/npm-windows-upgrade

npm3.x 中,node_modules文件夹中的模块以扁平结构存储。这应该有助于避免导致 Azure 调试器崩溃的路径上的 256 个字符限制(前提是您的解决方案根目录的路径还不太长)。

默认情况下,在 Windows 上安装 Node 时,npm版本 2 会预先捆绑(截至 2015 年 9 月 8 日)。使用常规npm更新命令npm -g install npm@<version>将不起作用,因为 Node 将始终查看npm安装附带的版本;这就是npm-windows-upgrade进来的地方。

以管理员权限打开 Windows PowerShell 并运行以下任务以选择npm要安装的版本。

  1. Set-ExecutionPolicy Unrestricted -Scope CurrentUser -Force
  2. npm install -g npm-windows-upgrade
  3. npm-windows-upgrade

在此处输入图像描述

补充阅读:

https://github.com/npm/npm/wiki/Troubleshooting#upgrading-on-windows https://github.com/npm/npm/issues/3697#issuecomment-114665926

于 2015-10-06T22:37:39.470 回答