代码之家  ›  专栏  ›  技术社区  ›  Amessihel

在subversion中构造visual studio解决方案并保留项目引用

  •  0
  • Amessihel  · 技术社区  · 5 年前

    结构化的 Visual Studio解决方案 这边(在看到这个问题之后 15621 ):

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

    在这里, exe.vbproj 引用了 dll.vbproj . 如果我用 MSBube .

    现在我要标记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 手动路径。

    我做错什么了吗? 是否无法避免手动编辑?

    0 回复  |  直到 5 年前
        1
  •  1
  •   LoLance    5 年前

    通常,当我们在一个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>
    

    因此,我认为您可以尝试将其更改为下面的内容,当加载项目文件时,如果项目位于主干文件夹中,它将向主干文件夹下的.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>
    

    对于这个脚本,当它在tags文件夹中时。我们使用路径: $(SolutionDir)dll\tags\$(VersionNumber)\dll.vbproj 但是$(版本号)的值对我们来说是未知的。 $(SolutionDir) , $(ProjectDir) 是预定义的)

    所以它的价值取决于:

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

    我的意思是,对于1.0.0.0版本的文件,tags fodler下有一个1.0.0.0文件夹,当你更新到2.0.0.0时,tags文件夹下只有一个2.0.0.0文件夹,而不是1.0.0.0和2.0.0.0文件夹。对于这种情况:路径可以是: $(solutiondir)dll\tags\$(versionnumber)dll.vbproj

    2.如果已在.xxproj文件中预定义$(versionNumber)属性,则路径可以是: $(solutiondir)dll\tags\$(versionnumber)dll.vbproj

    (不确定如何构造它们,如果按.xxproj文件构造它们,则可能具有预定义的版本号,如果手动进行,而不在.vbproj中定义,则无法以这种方式轻松使用路径)

    3.现在我们只需要在生成过程中获取assemblyFileversion属性的值。对于您的情况,您需要在生成之前获取assemblyfileversion号,请检查第一个方向 this thread 更多细节。

    对于图案:更改自 <Pattern>\[assembly: AssemblyVersion\(.(\d+)\.(\d+)\.(\d+).(\d+)</Pattern> <Pattern>\[assembly: AssemblyFileVersion\(.(\d+)\.(\d+)\.(\d+).(\d+)</Pattern> 如果按文件版本进行结构。

    $(版本号)应如下所示:

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

    贝克回到你原来的岗位:

    我做错什么了吗?是否无法避免手动编辑?

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