在Dot.Net中自动更改代码变化的程序集的版本。

问题描述 投票:0回答:1

我正在为我的应用程序创建补丁,以部署小的变化给客户。在我的应用程序中,我有100个.CSProject。在100个库中,我在类库A,B,C和库D中做了代码更改,调用A,B和C库。因此,有什么办法,当我建立我的应用程序,那么它应该改变的版本,只有A,B,C和D库有变化。我可以手动改变,但我需要任何自动的方法。

visual-studio msbuild .net-assembly automatic-differentiation assemblyversions
1个回答
0
投票

因此,有什么办法,当我建立我的应用程序,那么它应该改变的版本,只有A,B,C和D库有变化。我可以手动改变,但我需要任何自动的方式。

其实。Directory Build.targets 文件可以或许实现。当你创建一个名为Directory.Build.target的文件时,它可以搜索并作用于当前文件夹和下属的所有项目。请看 本文件 关于其搜索范围。 Directory Build.targets 就像 Directory Build.props. 而且 Directory Build.targets 构建后执行,而 Directory Build.props 在构建开始前执行。

在你的情况下,你想覆盖属性 版本,你应该使用 Directory Build.targets.

那么 当你在建立一个项目时,它会自动将内容放在项目的范围内。

解决办法

1) 创建一个名为 Directory Build.targets 文件在您的解决方案或100个项目的上层目录下。

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.

enter image description here

它将工作在当前文件夹及其二级目录下的所有项目。

并在这个文件中加入我的示例代码。

<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.

© www.soinside.com 2019 - 2024. All rights reserved.