在Windows 10上未登录时,Visual Studio 2013 devenv无法构建项目

9

我有一个项目,我在Windows 10机器上使用zsh命令构建:

devenv $sln -project $project -rebuild "Release|x64"

如果我在终端中本地运行它,它总是有效的。但是,我通过任务计划程序和(cygwin)ssh运行它。它仍然有效,但只有当我实际上在本地或远程桌面会话中登录到机器时才有效。
如果在用户退出登录时运行命令,我会看到以下消息:
Microsoft Visual Studio已检测到配置问题。要更正此问题,请以管理员身份重新启动。有关更多信息,请访问:http://go.microsoft.com/fwlink/?LinkId=320596 使用ssh的示例。
1. 我登录物理机器 2. 我ssh进入该机器 3. 运行命令。 运行良好。 4. 在物理机器上退出登录 5. 在同一ssh会话中运行命令。 失败。
当我说“物理机器”时,我的意思是运行命令的主机机器。
我有一个最新的Windows 10 Professional机器和最新的Visual Studio 2013。
如果在用户退出登录时以最高权限设置为工作的情况下运行命令,而用户已退出登录,则它也会失败。

将devenv设置为始终以管理员身份打开(使用我在S.O.上看到的所有方法)没有帮助。 禁用UAC也没有帮助。

我会选择让机器一直保持登录状态,但是问题也会在远程桌面会话之后出现:如果我远程桌面连接到那台机器,命令在我打开远程会话时继续工作(即使通过ssh和任务计划程序),但是一旦我断开rdp会话,它就停止工作了。

编辑:在执行时加载了正确的用户配置文件,devenv活动日志没有显示任何错误或警告。日志仅显示devenv在确定客户端权限后退出。

编辑:我已经测试了@Callan's msbuild解决方案,并且对于使用以下内容进行解决方案构建的所有项目似乎都有效:

msbuild $sln /t:Rebuild /p:Configuration=Release;Platform=x64

以下是单个项目构建的相关内容(在此处找到):

msbuild $sln /t:"$project:Rebuild" /p:Configuration=Release;Platform=x64 /p:BuildProjectReferences=false

这并不是严格意义上的解决方案,因为正如@SimonMourier指出的那样,它们并不等价。这是一个解决方法,对我而言非常有效,虽然它可能不适用于所有情况,但现在看来似乎没有更好的解决方案。
这肯定比我的当前解决方法要好,我的解决方法是让机器自动登录和锁定,然后告诉我的机器在RDP会话结束时重新启动,确保我始终拥有交互式会话。

1
Visual Studio 需要正确的用户配置文件才能加载运行。可能相关的链接:https://support.microsoft.com/zh-cn/kb/2968540。此外,您是否已经检查活动日志:https://blogs.msdn.microsoft.com/visualstudio/2010/02/24/troubleshooting-extensions-with-the-activity-log/。 - Simon Mourier
据我所知,正确的用户配置文件已加载。$USERNAME$USERPROFILE都按预期设置。我已经检查了日志,并且在失败和工作构建的前42个条目是相同的。在工作构建中,第43个条目是“进入函数CVsPackageInfo :: HrInstantiatePackage”,而在失败的构建中,程序似乎只是开始干净地退出“AppId stopped registry detouring”。两者的第42个条目均为“客户端权限确定:…”。 - Jools
是的,我相当确定已加载正确的用户配置文件,因为两个日志都报告从同一个用户目录读取“客户端权限令牌”。 - Jools
1
凭据方面怎么样?现在VS需要连接到Microsoft并检查许可证。 - Simon Mourier
我该如何检查呢?日志中没有关于凭据的记录,也没有错误或警告。 - Jools
1
我可以在我的Windows 10电脑上重现这个问题。我只是想知道Visual Studio是否可以在非交互式会话中运行。也许微软由于某些原因(技术?许可证?)不允许这样做。我无法在任何地方找到相关信息。这可能与Session 0隔离有关:https://msdn.microsoft.com/en-us/library/windows/hardware/dn653293.aspx。请注意,msbuild可能是最简单的路线,但并不完全等效(环境变量等不同)。 - Simon Mourier
4个回答

4

如果您使用msbuild而不是devenv,则它将起作用。

msbuild $sln /t:Rebuild /p:Configuration=Release;Platform=x64

这将重新构建整个解决方案而不是一个项目。请参考https://dev59.com/ZWYr5IYBdhLWcg3wJ3CU获取有关项目的命令行信息,以及https://dev59.com/yWct5IYBdhLWcg3whtqh#12081931了解其工作原理。 - ivan_pozdeev
我注意到了。我认为相当于问题命令的东西可能是这样的: msbuild $sln /t:"$project:Rebuild" /p:Configuration=Release;Platform=x64 - Jools
3
.vdproj扩展名的安装程序项目无法通过MSBuild进行构建,有什么解决方案吗? - Gianpolo

2
任务计划程序使用非交互式会话登录用户。您的SSH会话也可能如此。这意味着分配的堆大小和可分配的内存大小比交互式登录时要小。您可能会遇到内存限制问题。 要么增加分配的堆大小(请参见此问题),要么使用服务帐户来运行编译作业。

如果这是问题的原因,你是否期望它在通过ssh或任务计划程序构建时始终失败?令人困惑的是,只要用户在构建命令运行时也登录到实例中,无论任务或ssh会话何时开始,它都从未在ssh或任务计划程序上失败。会话是否可以在交互式和非交互式之间动态切换? - Jools
1
如果您已经登录,那么已经存在一个交互式会话,任务计划程序或SSH可以直接使用该会话。它们肯定不会注销您的用户帐户以启动非交互式会话。 - Simmetric
我尝试将堆大小增加到与交互式会话相同的大小,但这并没有改变此问题的行为。我相当确定我所看到的必须是特定于devenv在启动时执行的某些操作,因为这几个项目是更大编译作业的一部分,并且它们始终是唯一出现问题的东西。 - Jools

0

-1

请确保您已配置此选项在此输入图片描述


2
我已经设置了这个。当我说“Windows任务计划程序(设置为在未登录时工作)”时,对不起,那就是我的意思。另外,这不是任务运行的问题。它可以运行,但命令失败了。我通过ssh得到了相同的结果。这似乎与任务计划程序无关,而与devenv(VS)或Windows 10问题有关。 - Jools

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接