那么当我构建我的应用程序时有什么办法吗?它应该改变
只有 A、B、C 和 D 库的版本有变化。手动我
可以改变,但我需要任何自动方式。
其实Directory Build.targets文件大概可以实现。当您创建一个名为 Directory.Build.targets 的文件时,它可以搜索并作用于当前文件夹和下属中的所有项目。请参阅this document 了解其搜索范围。 Directory Build.targets 很像 Directory Build.props。 Directory Build.targets 在构建之后执行,而Directory Build.props 在构建开始之前执行。
在你的情况,你想覆盖属性Version,你应该使用Directory Build.targets。
然后当您构建项目时,它会自动将内容放入项目范围内。
解决方案
1) 在您的解决方案或 100 个项目的上级目录下创建一个名为 Directory Build.targets 的文件。
2) 将这些添加到Directory Build.targets 文件中:
<Target Name="change_property" AfterTargets="CoreCompile">
<PropertyGroup>
<Version>xxxxx</Version>
</PropertyGroup>
</Target>
3) 然后您可以将所有更改的项目的版本设置为您希望的相同版本。
并且此函数对所有更改的项目进行相同的属性更改。
你应该注意它有一个缺陷
但您不应该修改其他相关项目(代码更改或添加新项目、图片或其他任何内容)如果您更改无关项目,此功能也会更改无关项目的版本。这是 CoreCompile 目标的一个特殊功能。
建议
因此,注意不要修改其他项目,或者可以使用Alt+A全选项目-->卸载项目,然后重新加载需要的项目并修改,以防其他不相关的项目项目已修改。
或者尝试将这些需要的项目放入解决方案文件夹(存在xxx.sln文件)下名为Modified Projects的新文件夹,然后将Directory Build.targets放入Modified Projects文件夹。
-----------------使用类似的其他方法来避免这种情况。
更新 1
1)如果您的项目在同一个解决方案文件夹中,那么您可以创建一个名为 Directory.Build.targets 的文件。
它将适用于当前文件夹及其二级目录中的所有项目。
并在此文件中添加我的示例代码:
<Project>
<Target Name="change_property" AfterTargets="CoreCompile">
<PropertyGroup>
<Version>xxxxx</Version>
</PropertyGroup>
</Target>
</Project>
然后您可以修改您的 nuget 项目,当您完成相关项目后,您可以构建您的解决方案或使用 MSBuild.exe 到build xxx.sln,此文件将自动执行并更改修改后的 nuget 项目的版本。
希望它能对您有所帮助,并期待任何其他反馈。
更新 2
请尝试更改为在Directory.Build.targets 中使用,它将在整个解决方案下适用于每个verison 号码。
<Project>
<Target Name="change_property" AfterTargets="CoreCompile">
<PropertyGroup>
<Version>xxxxx</Version>
</PropertyGroup>
</Target>
</Project>
<PropertyGroup>
<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
</PropertyGroup>
并确保<GeneratePackageOnBuild>true</GeneratePackageOnBuild> 在Directory.Build.targets 中。否则会失败。所以请在xxx.csorj文件中删除这个节点,并在Directory.Build.targets中添加<GeneratePackageOnBuild>true</GeneratePackageOnBuild>。