这个用例可能有点离题,但我希望有人能帮助我......
多年来,我一直维护着一个 MSBuild 命令“库”——在一个我们将调用的文件中CommonTasks.targets
,通过我们的内部 NuGet 服务器分发——它处理我公司项目所需的各种任务。在过去的几年里,我一直使用 GitVersion v3 来生成库自己的 NuGet 包版本号以及GetVersion
直接使用 GitVersion 的 MSBuild 目标(例如,在生成相应的 git 标签时),以避免需要提取 GitVersion - 从依赖项目的程序集生成的版本,构建后。
以前(使用 GitVersion v3),我的CommonTasks.targets
文件只需要导入位于 GitVersion 的 NuGet 包中的 GitVersionTask.targets 文件\build\dotnet\GitVersionTasks.targets
。这个目标文件依次执行必要的UsingTask
命令(特别是GitVersionTask.GetVersion
),然后让我在导入后调用<GetVersion ...>
我自己的文件。.targets
在 v4 中,GitVersionTask 引入了对 UtilPack.NuGet.MSBuild 的依赖(我收集它有助于各种 NuGet 命令)。首先,这意味着我需要导入它的UtilPack.NuGet.MSBuild.props
文件,否则 GitVersionTask 根本不会加载。但是,完成此操作后,我现在尝试GetVersion
从 MSBuild 文件中调用时遇到意外错误。看起来,GetVersion 目标现在尝试查询我定义的所有 NuGet 存储库(nuget.org、本地缓存、我们公司服务器等)以获取我的库的打包版本,最后我收到了这个错误:
MSBUILD:NuGetTaskRunnerFactory 错误 NR0001:[NuGet 错误]:无法找到具有版本的包 CommonTasks (>= 1.37.0-gitversiontask4-0001) [C:\redacted\CommonTasks\Build.proj] MSBUILD:NuGetTaskRunnerFactory 错误 NR0001:-在 Source1 [最近版本:1.36.3] [C:\redacted\CommonTasks\Build.proj] 中找到 108 个版本 MSBUILD:NuGetTaskRunnerFactory 错误 NR0001:-在 Source2 [最近版本:1.36.3] [C:\redacted\CommonTasks\Build.proj] 中找到 42 个版本 MSBUILD:NuGetTaskRunnerFactory 错误 NR0001:-在 Microsoft Visual Studio 脱机包 [C:\redacted\CommonTasks\Build.proj] 中找到 0 个版本 MSBUILD:NuGetTaskRunnerFactory 错误 NR0001:-在 nuget.org [C:\redacted\CommonTasks\Build.proj] 中找到 0 个版本 MSBUILD:任务工厂错误 NMSBT003:找不到主包 CommonTasks@。[C:\redacted\CommonTasks\Build.proj(47,9):错误 MSB4175:任务工厂“Ut ilPack.NuGet.MSBuild.NuGetTaskRunnerFactory”无法从程序集“C:\redacted\CommonTasks\packages\UtilPack.NuGet.MSBuild.2.7.0\build\\net46\UtilPack.NuGet.MSBuild.dll”加载。对象参考 erence 未设置为对象的实例。
我不明白为什么它会尝试 NuGet 检索,即使这是新的默认行为,我也不知道禁用它的方法,或者禁止它,我不知道它为什么不起作用。我认为该错误一定与这不是一个普通的.NET 项目有关(即,除了.targets 文件、没有.csproj 文件等之外没有源代码)。但是我的库被许多普通的 .NET 项目使用,这些项目本身使用 GitVersionTask 对其程序集进行自动版本控制。
现在我已经将我的库固定到 GitVersionTask v3,但非常想弄清楚如何允许它使用 v4,就像我之前使用的 v3 一样。我可能会改用 GitVersion.CommandLine 包并解析其输出,但我最终确实需要这些 GitVersion 生成的版本作为 MSBuild 属性,以便按预期使用它们。并且依赖项目也使用 GitVersionTask(不是 CLI),可以很方便地为两者使用一个包。
有没有办法解决我正在使用 GitVersionTask v4 做的事情,或者一些完全不同(也许更优雅)的方式来实现我想要做的事情?