【问题标题】:MSBuild a project from a solution fileMS从解决方案文件构建项目
【发布时间】:2018-02-14 23:19:59
【问题描述】:

我正在尝试使用来自 RTC (BuildForge) 的 MSBuild 启动 .net 构建。我不断收到以下异常:

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

构建命令如下

MSBuild.exe "xxxx.sln" /t:xxx_yyyy_zzzzzz_asdfasdf_base

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

【问题讨论】:

  • 关于您的响应打击,您能否从输出 .metaproj 中发布相关的目标节点,以确认您作为目标发送的内容与输出 metaproj 中显示的内容完全相同?
  • 其实,这正是我正在做的。我有一个创建该日志行的 powershell 脚本,并且我试图以这种方式构建 ut。我可以只构建 vb 项目,但这听起来不是最佳实践。

标签: msbuild


【解决方案1】:

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

msbuild.exe MySolution.sln /t:Clean

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

msbuild.exe MyProject.csproj

编辑:

Eureka,你说的完全正确,我使用了 MsBuildEmitSolution 环境变量来输出 metaproj 脚本,但之前从未见过。

所以在你到达之前:

MsBuild.exe MySolution.sln /t:ProjectName:TargetName

在命令行,设置 MsBuildEmitSolution:

set MsBuildEmitSolution=1

然后生成您的元项目。

MsBuild.exe MySolution.sln /pp

在记事本中打开输出文件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>

瞧!

MsBuild.exe MySolution.sln /t:"Client_Test:Build"

【讨论】:

  • codeproject.com/Articles/654910/… 不,我认为您可以从解决方案构建项目...我只是想知道我是否有正确的语法...如果我没记错的话我能够做到以前,但不知何故,它说该项目不存在?我很肯定它存在。
  • 还... msdn.microsoft.com/en-us/library/ms171486.aspx 显示如何操作...
  • 对,但是你知道我为什么会出现上述异常吗?正如我所说,这就是我正在打的电话?
  • 因为您跳过了生成输出“solution.sln.metaproj”文件并使用目标节点中显示的名称的步骤。查看夹着 VOILA 的代码块,并查看目标名称是如何传递的,与 .metaproj 中显示的完全一样。
  • @Nicodemeus :这也解决了我的问题。就像OP一样,我发现VS2015对我来说发生了这个错误,之前没有发生过。发生这种情况的原因是使用 VS2015 与旧版本创建项目的默认方式,因此不会创建元项目文件 /
猜你喜欢
  • 2011-06-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多