【问题标题】:How do I target a specific .NET project within a Solution using MSBuild from VS2010?如何使用 VS2010 中的 MSBuild 在解决方案中定位特定的 .NET 项目?
【发布时间】:2011-09-14 20:24:03
【问题描述】:

我有一个可以构建整个解决方案的 MSBuild 命令行。它看起来像这样:

msbuild SomeSolution.sln /p:Configuration:CustomDebug;Platform=OurPlatform /nodeReuse:false /maxcpucount:4 /t:Build

我知道对于 C++ 解决方案,可以使用以下语法定位特定项目:

msbuild SomeSolution.sln /p:Configuration:CustomDebug;Platform=OurPlatform /nodeReuse:false /maxcpucount:4 /t:Folder\SomeCppProject;Build

我正在尝试在解决方案中为 .NET 项目实现相同的目标。这不起作用:

msbuild SomeSolution.sln /p:Configuration:CustomDebug;Platform=OurPlatform /nodeReuse:false /maxcpucount:4 /t:SomeDotNetProject;Build

有谁知道如何在 .NET 项目的命令行上使用 MSBuild 来定位解决方案中的特定项目?我知道我可以创建一个自定义 MSBuild 项目来实现我的目标,但我需要与 Visual Studio 共享解决方案和项目。

谢谢!
-肖恩

【问题讨论】:

    标签: visual-studio-2010 msbuild parallel-processing


    【解决方案1】:

    您需要在 Visual Studio 解决方案文件中指定任何解决方案文件夹,并替换任何“.”在项目名称中带有“_”:

    msbuild SomeSolution.sln /p:Configuration:CustomDebug;Platform=OurPlatform /t:Folder\Project_Name

    例如,如果您在解决方案文件夹“Deploy”中有一个名为“MyApplication.Deployment.csproj”的项目,则需要

    msbuild SomeSolution.sln /p:Configuration:CustomDebug;Platform=OurPlatform /t:Deploy\MyApplication_Deployment

    顺便说一下,这是一个解决方案文件夹,在 Visual Studio 中显示,不是一个文件系统文件夹:那些被忽略了。

    【讨论】:

    • /t:Deploy\MyApplication_Deployment 对我有用,但是如何定义构建此项目的目标.. /t:Deploy\MyApplication_Deployment:Rebuild 有效,但没有自定义目标..
    • 对我来说关键是“。”的“_”。片;我在 MS 文档中看不到在解决方案中指定特定项目所需的任何地方。在遇到这个解决方案之前,我一直在拔头发。
    • 我还必须将文件夹名称中的 '(' 和 ')' 替换为 '_' (GYP 生成的项目)。我猜所有的特殊字符都被下划线替换了。
    【解决方案2】:

    您可以使用以下命令行从命令行使用 msbuild 构建您的项目

    msbuild Solution.sln /p:Configuration=Release;Platform=x86 /t:ProjectName:Rebuild
    

    【讨论】:

      【解决方案3】:

      在项目文件而不是解决方案文件上调用 MSBuild (ref.msbuild /?)

      msbuild SomeDotNetProject\SomeDotNetProject.csproj /p:Configuration:CustomDebug;Platform=OurPlatform /nodeReuse:false /maxcpucount:4 /t:Build
      

      【讨论】:

      • 这行不通有两个原因: - 我们使用项目引用,这似乎无法正确解决 - 我们使用映射到“配置”和平台的不同组合的解决方案配置只是尝试(见鬼),到达了依赖项构建的地方,但它在期望平台/配置匹配的地方失败了。
      • 这很有帮助,除了我需要在“/p:Configuration”之后使用等号,而不是像“/p:Configuration=CustomDebug”这样的“/p:Configuration:CustomDebug”,这个修复了我遇到的一个错误。
      猜你喜欢
      • 1970-01-01
      • 2021-04-16
      • 2012-08-15
      • 2012-12-04
      • 1970-01-01
      • 1970-01-01
      • 2011-05-08
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多