【问题标题】:Does <Import Project="WrappedProject.vcxproj"/> work well in Visual-Studio IDE?<Import Project="WrappedProject.vcxproj"/> 在 Visual-Studio IDE 中运行良好吗?
【发布时间】:2016-02-26 09:42:59
【问题描述】:

我找到了this Gem,这正是我需要的:

在构建单个 sln 配置而不复制项目文件时为多个 配置构建一个项目:

在 Visual Studio 2010 中导入项目对我来说是这样的:

TestProject64.vcxproj

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="TestProject.vcxproj" /> *<== the wrapped project*
  <ItemGroup Label="ProjectConfigurations">
    <ProjectConfiguration Include="Release|x64"> *<== just needed by VS*
      <Configuration>Release</Configuration>
      <Platform>x64</Platform>
    </ProjectConfiguration>
  </ItemGroup>
  <PropertyGroup Label="Globals">
    <ProjectGuid>{B7D61F1C-B413-4768-8BDB-31FD464AD053}</ProjectGuid>
  </PropertyGroup>
</Project>

TestProject64.vcxproj.filters

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <Import Project="TestProject.vcxproj.filters" />
</Project>

TestProject.vcxproj 内部定义了两个配置:Release|x86 和释放|x64。如您所见,TestProject64.vcxproj 只有 发布|x64 配置。定义至少一种配置 TestProject64.vcxproj 是必须的,否则 Visual Studio 不会 能够将 TestProject64.vcxproj 添加到解决方案中。

现在可以同时包含 TestProject.vcxproj 和 TestProject64.vcxproj 到相同的解决方案并构建 Release|x86 和 同时发布|x64。

现在的问题是是否所有 Visual Studio 版本 2010 - 2015+ 都能很好地处理这个问题:

  • VS 会尝试以某种方式编辑/规范化包装器项目吗?
  • 打开项目属性会不会有什么奇怪的行为?
  • 在命令行上从 IDE 与 MSBUILD 构建时会出现意外行为吗?

底线:这是否可以在生产团队中部署而不会让人头疼?


用例(任何人都感兴趣):

  • X.sln
    • proj_cpp_dll ... C++ DLL 可以在 64 位和 32 位中构建
    • proj_exe1_x64 ...需要64位版本的DLL
    • proj_exe2_Win32 ...需要32位版本的DLL

通过Release|Any CPU(或Release|Mixed Platforms)的一次构建过程必须(应该)足以构建它。

【问题讨论】:

  • 似乎智能感知/查找/导航体验可能不是最理想的,因为所有文件都会出现两次。无论如何,无论它是否有效,链接问题的第二个答案(或变体)是 imo 更好的解决方案:经过尝试、测试、易于扩展且没有意外(对您的 3 个问题回答“否”:)。如果这不妨碍您:一个更简单的解决方案是向 dll 项目添加一个构建后事件,该项目只是执行 &lt;MsBuild Projects="$(MsBuildThisProjectFile)" Targets="Build" Properties="Platform=&lt;otherplatform&gt;"/&gt;
  • @stijn - 哪个是“第二个”?

标签: visual-studio visual-c++ msbuild projects-and-solutions


【解决方案1】:

自 MSBuild 开始以来,Import 元素功能没有改变,因此对您的三个问题的简短回答是否定的。

但是,这取决于谁需要维护它:如果它由您负责,那么您可以测试几个并推出其余的。但如果他们不知道这个解决方案,它可能会将其他人引向花园小径。在这种情况下,更安全和更详细的是使用@stijn 提到的AfterBuild 目标

【讨论】:

  • 查看我的own conclusion - 如果您有任何了解,请随时发表评论。
【解决方案2】:

初步结果是……这实际上不起作用

包装器项目加载良好,VS 没有触及它(乍一看),包装器项目也构建良好...... 除了

项目引用/依赖项未正确构建

x64 包装器依赖于另一个项目。然而,这个其他项目依赖项是在包装项目中定义的。

因此,当您在 IDE 中调用 Build 时,x64 包装器项目将正确构建,但其依赖项将“仅”构建在活动解决方案平台中——这显然是错误的(否则,您将'不需要包装器)。

底线:仅当解决方案中的其他项目没有项目依赖关系时才有效——这实际上意味着:不起作用。

【讨论】:

  • 您需要为 x86 和 x64 创建两个包装器,并将其递归地应用于依赖项。被包装的项目没有依赖,但是x86包装器依赖x86依赖包装器,x64依赖x64等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多