我有一个MSBuild命令行,可以构建一个完整的解决方案.它看起来像这样:
msbuild SomeSolution.sln/p:配置:CustomDebug; Platform = OurPlatform/nodeReuse:false/maxcpucount:4/t:Build
我知道对于C++解决方案,可以使用以下语法来定位特定项目:
msbuild SomeSolution.sln/p:配置:CustomDebug; Platform = OurPlatform/nodeReuse:false/maxcpucount:4 / t:Folder\SomeCppProject; Build
我正在尝试在解决方案中为.NET项目实现相同的功能.这不起作用:
msbuild SomeSolution.sln/p:配置:CustomDebug; Platform = OurPlatform/nodeReuse:false/maxcpucount:4 / t:SomeDotNetProject; Build
有没有人知道如何在.NET项目的命令行上使用MSBuild在解决方案中定位特定项目?我知道我可以创建一个自定义的MSBuild项目来实现我的目标,但我需要与Visual Studio共享解决方案和项目.
谢谢!
-Sean
我有一个项目,我在Windows 10机器上的zsh中使用以下命令构建:
devenv $sln -project $project -rebuild "Release|x64"
Run Code Online (Sandbox Code Playgroud)
如果我在终端本地运行它,它总是有效.然而,我通过任务调度程序运行它,有时通过(cygwin)ssh运行它.它仍然有效,但前提是我实际上是在本地登录本机或使用远程桌面会话.
如果在用户注销时运行该命令,我会看到以下消息:
Microsoft Visual Studio检测到配置问题.要更正此问题,请以管理员身份重新启动 有关详细信息,请访问:http://go.microsoft.com/fwlink/?LinkId = 320596
使用ssh的示例.
当我说"物理机器"时,我的意思是运行命令的主机.
我有一台最新的Windows 10 Professional机器和最新的Visual Studio 2013.
如果命令是通过Windows任务调度程序运行(在没有以最高权限登录时设置为工作),则在用户注销时也会失败.
将devenv设置为始终以管理员身份打开(使用我在SO上看到的所有方法)并没有帮助.禁用UAC没有帮助.
我会选择让机器一直处于登录状态,但是在远程桌面会话之后也会出现问题: - 如果我将远程桌面安装到该机器上,那么当我打开远程会话时,命令会继续工作(即使是通过ssh和任务调度程序),但是一旦断开rdp会话,它就会停止工作.
编辑:在执行点加载正确的用户配置文件,devenv活动日志显示没有错误或警告.日志只显示devenv退出之后Client rights determined.
编辑:我已经测试了@Callan的msbuild解决方案,它似乎适用于我的所有项目,使用以下解决方案构建:
msbuild $sln /t:Rebuild /p:Configuration=Release;Platform=x64
Run Code Online (Sandbox Code Playgroud)
以下是单个项目构建(在此处找到):
msbuild $sln /t:"$project:Rebuild" /p:Configuration=Release;Platform=x64 /p:BuildProjectReferences=false
Run Code Online (Sandbox Code Playgroud)
这并不是问题的严格解决方案,因为@SimonMourier指出,它们并不等同.这是一个幸运的解决方法,虽然它可能不适用于所有情况,但它似乎开始看起来没有更好的解决方案.
它肯定比我目前的解决方法更好,使机器自动登录和锁定,然后告诉我的机器在RDP会话结束时重新启动,确保我总是有一个交互式会话.