【问题标题】:Building Visual Studio project with different platforms via MSBuild通过 MSBuild 构建不同平台的 Visual Studio 项目
【发布时间】:2012-09-03 03:21:37
【问题描述】:

我有 3 个配置项目:

  • 项目 A:调试|AnyCPU,发布|AnyCPU
  • 项目 B:调试|AnyCPU,发布|AnyCPU
  • 项目 C:Debug|x86、Debug|x64、Release|x86、Release|x64

项目 C 在依赖项中有 B,而 B 在依赖项中有 A。 (A

我使用 *.bat 文件从命令行构建它:

msbuild A.csproj /target:Build /property:Configuration=Debug;Platform=AnyCPU /verbosity:minimal
msbuild A.csproj /target:Build /property:Configuration=Release;Platform=AnyCPU /verbosity:minimal<br/>
msbuild B.csproj /target:Build /property:Configuration=Debug;Platform=AnyCPU /verbosity:minimal
msbuild B.csproj /target:Build /property:Configuration=Release;Platform=AnyCPU /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Debug;Platform=x86 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Release;Platform=x86 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Debug;Platform=x64 /verbosity:minimal
msbuild C.csproj /target:Build /property:Configuration=Release;Platform=x64 /verbosity:minimal

并收到错误:

C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(609,5):错误:未为项目“A.csproj”设置 OutputPath 属性。请检查以确保您为此项目指定了有效的配置和平台组合。配置='调试'平台='x86'。您可能会看到此消息,因为您正在尝试构建没有解决方案文件的项目,并且指定了该项目不存在的非默认配置或平台。 [A.csproj] C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Microsoft.Common.targets(609,5):错误:未为项目“B.csproj”设置 OutputPath 属性。请检查以确保您为此项目指定了有效的配置和平台组合。配置='调试'平台='x86'。您可能会看到此消息,因为您正在尝试构建没有解决方案文件的项目,并且指定了该项目不存在的非默认配置或平台。 [B.csproj]

【问题讨论】:

  • .dll 引用而不是 ProjectReference 不好,我希望在每个构建上也建立依赖关系。为主项目定义“任何 CPU”也很糟糕,因为它不是“任何 CPU”,而是 x86 或 x64。对我来说,这个问题并没有很好地解决。在正确完成之前,我将停止对我的项目使用 MSBuild。我想我也可以从命令行使用 devenv.exe 构建,但它表明这是不推荐使用的并且它是错误的,devenv 有时会挂起直到无缘无故被杀死。

标签: visual-studio msbuild platform


【解决方案1】:

您可以尝试从命令行使用devenv.exe 构建项目。我认为这不会有您遇到的问题,但我记得有关此构建选项的一些内容将被弃用,有时它会无缘无故地挂起。我把它写成一个选项,只是因为其他两个也不适合我。

【讨论】:

    【解决方案2】:

    我找到了解决问题的方法。 使用 *.csproj 文件中的选择元素通过 Visual Studio 或通过 MSBuild 检测构建,并为 MSBuild 使用 Reference(而不是 ProjectReference)。

    <Choose>
      <When Condition="'$(BuildingInsideVisualStudio)' == 'true'">
        <ItemGroup>
          <ProjectReference Include="A.csproj">
            <Project>{AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA}</Project>
            <Name>A</Name>
            <Private>True</Private>
          </ProjectReference>
          <ProjectReference Include="B.csproj">
            <Project>{BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB}</Project>
            <Name>B</Name>
            <Private>True</Private>
          </ProjectReference>
        </ItemGroup>
      </When>
      <Otherwise>
        <ItemGroup>
          <Reference Include="A, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx, processorArchitecture=MSIL">
            <HintPath>A.dll</HintPath>
            <Private>True</Private>
          </Reference>
          <Reference Include="B, Version=1.0.0.0, Culture=neutral, PublicKeyToken=xxxxxxxxxxxxxxxx, processorArchitecture=MSIL">
            <HintPath>B.dll</HintPath>
            <Private>True</Private>
          </Reference>
        </ItemGroup>
      </Otherwise>
    </Choose>
    

    【讨论】:

      【解决方案3】:

      如果您在解决方案文件中定义自定义构建配置,您就可以完成这项工作。

      在 Visual Studio 中打开解决方案,然后打开解决方案的配置管理器。在活动解决方案平台下拉菜单中,将有 &lt;New...&gt; 选项,允许您为解决方案创建 x86 和 x64 平台。创建它们后,在同一个下拉列表中选择每一个,并确保在列表中您的项目 A 和 B 具有 Any CPU,并且项目 C 已相应地选择了 x86 或 x64。还要确保选中 Build 复选框。

      现在将 Active 解决方案配置切换为 Release,并以相同方式定义这些额外平台。

      完成此操作后,您将能够构建所有 3 个项目,仅在 MSbuild 命令行中指定解决方案文件:

      msbuild ABC.sln /target:Build /property:Configuration=Debug;Platform=x86 /verbosity:minimal
      msbuild ABC.sln /target:Build /property:Configuration=Release;Platform=x86 /verbosity:minimal
      msbuild ABC.sln /target:Build /property:Configuration=Debug;Platform=x64 /verbosity:minimal
      msbuild ABC.sln /target:Build /property:Configuration=Release;Platform=x64 /verbosity:minimal
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-12-05
        • 2016-12-16
        • 2011-08-05
        • 2018-03-03
        • 2021-05-25
        • 2017-08-03
        • 1970-01-01
        • 2019-09-24
        相关资源
        最近更新 更多