已经构建一个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
手动修复对路径的引用,否则我将无法构建。
我做错什么了吗?有没有办法避免手动编辑?
通常我们在一个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>
,如果你的文件版本构造它们。
$(VersionNumber) 应该是这样的:
<PropertyGroup>
<VersionNumber>$(FirstNum).$(SecondNum).$(ThirdNum).$(FourthNum)</VersionNumber>
</PropertyGroup>
所以回到你原来的帖子:
我做错什么了吗?有没有办法避免手动编辑?
你所做的一切都是针对你的具体情况,没有错。有一些方法可以避免手动编辑,但我不确定这种方式是否满足您的需求。因为有时当我们想要避免一些手动编辑时,我们需要做更多的工作来实现该方法。希望以上所有帮助:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句