我正在为我的应用程序创建补丁以向客户部署小的更改。在我的应用程序中,我有 100 个 .CSProject。在 100 个库中,我在类库 A、B、C 中进行了代码更改,并且库 D 正在调用 A、B 和 C 库。那么当我构建我的应用程序时有什么办法吗?它应该只更改有更改的 A、B、C 和 D 库的版本。手动我可以更改,但我需要任何自动方式。
1 回答
那么当我构建我的应用程序时有什么办法吗?它应该只更改有更改的 A、B、C 和 D 库的版本。手动我可以更改,但我需要任何自动方式。
实际上,Directory Build.targets
file 大概可以实现它。当您创建一个名为 Directory.Build.targets 的文件时,它可以搜索并作用于当前文件夹和下属中的所有项目。请参阅此文档以了解其搜索范围。 Directory Build.targets
很像Directory Build.props
。并Directory Build.targets
在构建之后Directory Build.props
执行,而在构建开始之前执行。
在您的情况下,您想覆盖属性Version,您应该使用Directory Build.targets
.
然后,当您构建项目时,它会自动将内容放入项目范围内。
解决方案
1)Directory Build.targets
在您的解决方案或100个项目的上级目录下创建一个名为file的文件。
2)将这些添加到Directory Build.targets
文件中:
<Target Name="change_property" AfterTargets="CoreCompile">
<PropertyGroup>
<Version>xxxxx</Version>
</PropertyGroup>
</Target>
3)然后您可以将所有更改的项目的版本设置为您希望的相同版本。
此功能对所有更改的项目进行相同的属性更改。
你应该注意它有一个缺陷
但是您不应该修改其他相关项目(代码更改或添加新项目,图片或其他任何内容)如果您更改不相关的项目,此功能也会更改不相关项目的版本。这是CoreCompile目标的一个特殊功能。
建议
因此,注意不要修改其他项目,或者可以使用Alt+A选择所有项目-->卸载项目,然后重新加载需要的项目并修改它们,以防其他不相关的项目被修改。
或者尝试将这些需要的项目放入Modified Projects
解决方案文件夹(存在xxx.sln
文件)下的一个新文件夹中,然后放入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
并添加.<GeneratePackageOnBuild>true</GeneratePackageOnBuild>
Directory.Build.targets