在 Subversion 中构建 Visual Studio 解决方案并保留项目引用

阿梅西赫尔

已经构建一个Visual Studio解决方案这种方式(看到这么问题后15621):

sln/
    dll/
        trunk/dll.vbproj        
    exe/
        trunk/exe.vbproj

这里,exe.vbproj 引用了 dll.vbproj. 如果我使用MSBuild构建每个项目,一切都应该没问题

现在我想标记 dll 和 exe 项目:

sln/
    dll/
        tags/1.0.0/dll.vbproj
        trunk/dll.vbproj       
    exe/
        tags/1.0.0/exe.vbproj
        trunk/exe.vbproj

我添加了一个目录的深度。因此,exe/tags/1.0.0/exe.vbproj除非我dll/tags/1.0.0/dll.vbproj手动修复对路径的引用,否则我将无法构建

我做错什么了吗?有没有办法避免手动编辑?

Lance Li-MSFT

通常我们在一个exe工程中通过右键project add project reference的方式添加对dll的工程引用时,exe.xxproj中的修改应该是这样的:

  <ItemGroup>
    <ProjectReference Include="..\..\DllName\trunk\DllName.vbproj">
      <Project>{1fe037b8-5561-4aa0-895d-8bad9eadad20}</Project>
      <Name>DllName</Name>
    </ProjectReference>
  </ItemGroup>

所以我觉得你可以尝试把它改成下面的内容,在加载项目文件的时候,如果项目在trunk文件夹下,它会在trunk文件夹下的.dll中添加ref。当 .exe 在 tags 文件夹中时,它将搜索 tags 文件夹以添加 ref。

  <!--When in a trunk folder-->
  <ItemGroup Condition="'$(ProjectDir)'=='$(SolutionDir)$(AssemblyName)\trunk\'">
    <ProjectReference Include="..\..\dll\trunk\dll.vbproj">
      <Project>{1fe037b8-5561-4aa0-895d-8bad9eadad20}</Project>
      <Name>dll</Name>
    </ProjectReference>
  </ItemGroup>

  <!--Not in a trunk folder-->
  <ItemGroup Condition="'$(ProjectDir)'!='$(SolutionDir)$(AssemblyName)\trunk\'">
    <ProjectReference Include="$(SolutionDir)dll\tags\$(VersionNumber)\dll.vbproj">
      <Project>{1fe037b8-5561-4aa0-895d-8bad9eadad20}</Project>
      <Name>dll</Name>
    </ProjectReference>
  </ItemGroup>

对于此脚本,当它位于标签文件夹中时。我们使用 path:$(SolutionDir)dll\tags\$(VersionNumber)\dll.vbproj进行搜索。但是 $(VersionNumber) 的值对我们来说是未知的。($(SolutionDir),$(ProjectDir)是预定义的)

所以它的价值取决于:

1.如果每次当您有项目的更新版本时,您都会删除或移动旧版本。

我的意思是对于文件版本 1.0.0.0,tags fodler 下有一个 1.0.0.0 文件夹,当您将其更新为 2.0.0.0 时,只存在一个 2.0.0.0 文件夹,而不是 1.0.0.0 和 2.0.0.0 文件夹下的 tags 文件夹. 对于这种情况:路径可以是这样的:$(SolutionDir)dll\tags\$(VersionNumber)\dll.vbproj

2.如果您已经在 .xxproj 文件中预定义了 $(VersionNumber) 属性,则路径可以是:$(SolutionDir)dll\tags\$(VersionNumber)\dll.vbproj

(不确定你是如何构建它们的,如果你通过.xxproj文件构建它们,你可能有预定义的VersionNumber,如果你手动完成并且没有在.vbproj中定义它,我们不能容易地以这种方式使用路径)

3.现在我们需要做的就是在构建过程中获取 AssemblyFileVersion 属性的值。对于您的情况,您需要在构建之前获取 AssemblyFileVersion 编号,请查看此线程中的第一个方向以获取更多详细信息。

对于模式:从变化<Pattern>\[assembly: AssemblyVersion\(.(\d+)\.(\d+)\.(\d+).(\d+)</Pattern><Pattern>\[assembly: AssemblyFileVersion\(.(\d+)\.(\d+)\.(\d+).(\d+)</Pattern>,如果你的文件版本构造它们。

$(Ve​​rsionNumber) 应该是这样的:

<PropertyGroup>
    <VersionNumber>$(FirstNum).$(SecondNum).$(ThirdNum).$(FourthNum)</VersionNumber>
</PropertyGroup>

所以回到你原来的帖子:

我做错什么了吗?有没有办法避免手动编辑?

你所做的一切都是针对你的具体情况,没有错。有一些方法可以避免手动编辑,但我不确定这种方式是否满足您的需求。因为有时当我们想要避免一些手动编辑时,我们需要做更多的工作来实现该方法。希望以上所有帮助:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Visual Studio解决方案中仅构建特定项目

如何从 Visual Studio 中的项目解决方案中删除其他构建文件

更新到最新的 subversion 后,Ankh SVN 未向 Visual Studio 中的解决方案添加新文件

我可以让 Visual Studio 只在解决方案中构建每个项目一次吗?

在多平台解决方案中构建 Visual Studio C++ 项目

Visual Studio 2017解决方案中的引用丢失

在解决方案中递归查找引用(Visual Studio)

Visual Studio构建解决方案

从Visual Studio解决方案中删除项目

在Visual Studio中查看多个项目/解决方案

带有多个使用不同版本控制系统(Subversion和TFS)的项目的Visual Studio解决方案

当我在同一解决方案中卸载项目时,Visual Studio 中的引用路径不起作用

从解决方案中构建一个Web项目,在Visual Studio Online Build Definition中使用多个Web项目

有没有办法在 Visual Studio 2017 中查看解决方案/项目构建使用的每个文件?

如何构建和部署具有多个项目的Visual Studio解决方案

Visual Studio App Center Android构建项目找不到解决方案文件

TeamCity继续构建从我的Visual Studio解决方案配置中排除的项目

Visual Studio 2019 拒绝构建解决方案 C++

如何在Linux下构建Visual Studio解决方案?

如何使Visual Studio使用FAKE构建我的解决方案?

Visual Studio:构建解决方案时输出时间戳

Visual Studio在启动时自动构建解决方案

在多项目Visual Studio解决方案中以不同配置编译项目

在Visual Studio中构建解决方案时使用哪个编译器?

通过每个框架一个解决方案在 Visual Studio 中构建多个框架支持

解决方案文件 Visual Studio 2019 中的路径已更改,现在无法构建文件

解决方案在 Visual Studio 中构建,但 Jenkins 引发资产异常

如何在Visual Studio中的解决方案中添加对组件的引用

使用Roslyn在Visual Studio解决方案中查找所有引用