我正在为我的应用程序创建补丁,以部署小的变化给客户。在我的应用程序中,我有100个.CSProject。在100个库中,我在类库A,B,C和库D中做了代码更改,调用A,B和C库。因此,有什么办法,当我建立我的应用程序,那么它应该改变的版本,只有A,B,C和D库有变化。我可以手动改变,但我需要任何自动的方法。
因此,有什么办法,当我建立我的应用程序,那么它应该改变的版本,只有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
.
它将工作在当前文件夹及其二级目录下的所有项目。
并在这个文件中加入我的示例代码。
<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
.