MS从解决方案文件中构建项目

Sof*_*ant 3 msbuild

我试图从RTC(Bui​​ldForge)使用MSBuild启动.net Build.我一直得到以下异常:

错误MSB1009:项目文件不存在.开关:F:\ Program Files(x86)\ IBM\Build Forge\Agent\Captiva_Build_dotNET\BUILD_117\xxxxxx \源代码\ Components\xxxxxx\xxxxxxx.sln

build命令如下

MSBuild.exe "xxxx.sln" /t:xxx_yyyy_zzzzzz_asdfasdf_base
Run Code Online (Sandbox Code Playgroud)

/t:解决方案中的其中一个项目.我不明白我做错了什么.我_在声明中有.这应该是一个简单的构建?有任何想法吗?

Nic*_*eus 9

msbuild.exe /t:target用于执行解决方案或项目中的特定目标.

msbuild.exe MySolution.sln /t:Clean
Run Code Online (Sandbox Code Playgroud)

要构建特定项目,您需要指定项目文件而不是解决方案.

msbuild.exe MyProject.csproj
Run Code Online (Sandbox Code Playgroud)

编辑:

尤里卡,你是绝对正确的,我使用了MsBuildEmitSolutionenv变量来输出metaproj脚本,但之前从未见过.

所以在你到达之前:

MsBuild.exe MySolution.sln /t:ProjectName:TargetName
Run Code Online (Sandbox Code Playgroud)

在命令行中,设置MsBuildEmitSolution:

set MsBuildEmitSolution=1
Run Code Online (Sandbox Code Playgroud)

然后生成你的metaproj.

MsBuild.exe MySolution.sln /pp
Run Code Online (Sandbox Code Playgroud)

MySolution.sln.metaproj在记事本中打开输出文件并向下滚动并找到<Target />您要构建的相关节点,并记下Name属性字符串.

  <Target Name="Client_Test:Build">
    <MSBuild Condition="'%(ProjectReference.Identity)' == '...Client_Test.csproj'" Projects="@(ProjectReference)" Targets="Publish" BuildInParallel="True" ToolsVersion="$(ProjectToolsVersion)" Properties="..." />
  </Target>
Run Code Online (Sandbox Code Playgroud)

还有VOILA!

MsBuild.exe MySolution.sln /t:"Client_Test:Build"
Run Code Online (Sandbox Code Playgroud)