0

我正在为我的应用程序创建补丁以向客户部署小的更改。在我的应用程序中,我有 100 个 .CSProject。在 100 个库中,我在类库 A、B、C 中进行了代码更改,并且库 D 正在调用 A、B 和 C 库。那么当我构建我的应用程序时有什么办法吗?它应该只更改有更改的 A、B、C 和 D 库的版本。手动我可以更改,但我需要任何自动方式。

4

1 回答 1

0

那么当我构建我的应用程序时有什么办法吗?它应该只更改有更改的 A、B、C 和 D 库的版本。手动我可以更改,但我需要任何自动方式。

实际上,Directory Build.targetsfile 大概可以实现它。当您创建一个名为 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

于 2020-05-01T10:04:56.323 回答