如何在命令行中生成一个.csproj文件并将日志写入指定的位置?

16

尽管“无记录”版本似乎可以与以下命令正常运行:

  

"c:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ ide \ VCSExpress" Project1.csproj /build

但以下命令失败:

  

"c:\ Program Files \ Microsoft Visual Studio 9.0 \ Common7 \ ide \ VCSExpress" Project1.csproj /build /Log = log.txt

显示一个带有以下文本的窗口:

  

缺少开关参数。需要/build开关的配置名称。

     

使用:    vcsexpress [solutionfile | projectfile | anyfile.ext] [switches]

     

vcsexpress的第一个参数通常是解决方案文件或项目文件。   如果您想要自动在编辑器中打开任何其他文件,则还可以使用任何其他文件作为第一个参数。当您输入项目文件时,IDE   查找与项目文件具有相同基本名称的.sln文件的父目录。如果没有这样的.sln文件存在,则   IDE查找引用该项目的单个.sln文件。如果没有这样的单一   .sln文件存在,则IDE创建一个未保存的默认.sln文件名的默认.sln文件   与项目文件具有相同的基本名称。

     

命令行生成:    vcsexpress solutionfile.sln /build [solutionconfig] [/project projectnameorfile [/projectconfig name]]    可用的命令行开关:

     

/Log将IDE活动记录到指定的文件中以进行故障排除。   /ResetSettings还原IDE的默认设置,可选地重置为       指定的VSSettings文件。   /SafeMode以安全模式启动IDE,最小化窗口。

     

特定于产品的开关:

     

要从命令行附加调试器,请使用:       VsJITDebugger.exe -p

[我正在使用Visual Studio 2008 Express]

因此,问题是:

  • 有没有办法确保日志文件写入某个位置?

  • 或者/Log开关是否只应在以GUI模式运行IDE时使用?如果是这样,是否有解决方法?


为什么不使用MSBuild进行构建? - Fyodor Soikin
@Fyodor Soikin 实际上只需要写一个日志就足够了(我只是在进行一些简单而粗糙的自动化)。 - mlvljr
我不熟悉Express产品,但是当我想使用其他工具创建日志时,我只需将控制台输出重定向到文件中。当然,这假设有一些输出可以重定向... - Jim Mischel
5
我不理解这个回答如何证明不使用MSBuild的正当性。如果你不知道,你只需要执行 MSBuild.exe myproj1.csproj 就可以像Visual Studio一样构建它。完全没有任何复杂的操作。但是,你也可以获得一些可扩展性和自定义选项,比如文件日志记录器。 - Fyodor Soikin
@Fyodor Soikin 好的,我可能会尝试一下。但最初的问题仍然困扰着我(特别是在 @Hans Passant 的详细但可悲无助的回答之后)。 - mlvljr
3个回答

32
在幕后,Visual Studio使用msbuild进行所有构建操作。据我所知,这也适用于Express版本。
如果您还没有安装,MSBuild是.NET SDK的一部分。
调用MSBuild的优点是可以直接进行构建操作 - 调用VCSExpress只会增加开销。
以下是我使用过的MSBuild命令行:
msbuild.exe <solution> 
    /t:rebuild 
    /verbosity:quiet 
    /logger:FileLogger,Microsoft.Build.Engine;logfile=<filePath>

应该使用<project>而不是<solution>,操作方式相同。

所以,既然我有(3.5?)sdk,我一定也有了MSBuild吧?(在“C:\ program files”中进行快速搜索没有发现任何东西.. - 它是否以不同的名称或其他方式隐藏?) - mlvljr
2
似乎在 %SystemRoot%\Microsoft.NET\Framework\v3.5 目录下,非常感谢。 - mlvljr
我不知道解决方案,但是我发现在构建csproj时,我还需要提供构建配置。例如:msbuild.exe name.csproj /property:Configuration=Debug|Release - xr280xr

4
您需要在/build选项之后指定配置。此外,日志文件必须已经存在,它不会从头开始创建一个新的日志文件。因此:
copy con > log.txt
^Z      // Type Ctrl+Z
"c:\Program Files\Microsoft Visual Studio 9.0\Common7\ide\VCSExpress" Project1.csproj /build debug /log log.txt

令人奇怪的是,在我的机器上仍然没有任何作用。即使项目无法构建(引用的dll故意缺失),日志文件也为空。但还是感谢你提供了“缺少开关参数”响应的提示 - 必须更加小心,不要认为自己听到的是胡言乱语(就像我一样)。 - mlvljr
日志文件选项相当奇怪。当我尝试时,它也不会记录太多内容。在使用msbuild的情况下,这并不经常使用。 - Hans Passant
最新的MSBuild(随net 4框架一起发布的那个)是否允许使用net 3.5编译器轻松构建net 3.5项目? - mlvljr
1
正确设置构建环境应该是一件麻烦的事情,如果你缺少.bat文件(也称为Visual Studio命令提示符)和SDK工具,那就更麻烦了。Msbuild可能还好,但我不确定,我从来不混用。胜算不大。 - Hans Passant

2
在弹出的窗口中,它会给出以下错误信息:
“缺少开关参数。/build开关需要配置名称。”
然后它会给出一堆信息,其中包括:
“命令行构建:vcsexpress solutionfile.sln /build [solutionconfig]
它只想知道您有哪种解决方案配置 - 我认为是“Release”或“Debug”。不确定vcsexpress是否在“Build”菜单下具有“配置管理器”或“解决方案生成属性页面”,但这是您可以仔细检查当前设置的地方。请参见“活动解决方案配置”..此人遇到了这个问题,请查看他们的屏幕截图: MSBuild任务配置属性

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