GitVersionTask v4,仅包含MSBuild项目

GitVersionTask v4,仅包含MSBuild项目,msbuild,nuget,gitversion,Msbuild,Nuget,Gitversion,这个用例可能有点脱离标签,但我希望有人能帮助我 多年来,我一直在维护一个MSBuild命令的“库”——在一个文件中,我们称之为CommonTasks.targets,通过我们的内部NuGet服务器分发——它处理公司项目所需的各种任务。在过去的几年中,我使用了GitVersionV3,既可以生成库自己的NuGet包版本号,也可以直接使用GitVersion的GetVersionMSBuild目标(例如,在生成相应的git标记时),为了避免需要从依赖项目的程序集提取GitVersion生成的版本,请

这个用例可能有点脱离标签,但我希望有人能帮助我

多年来,我一直在维护一个MSBuild命令的“库”——在一个文件中,我们称之为
CommonTasks.targets
,通过我们的内部NuGet服务器分发——它处理公司项目所需的各种任务。在过去的几年中,我使用了GitVersionV3,既可以生成库自己的NuGet包版本号,也可以直接使用GitVersion的
GetVersion
MSBuild目标(例如,在生成相应的git标记时),为了避免需要从依赖项目的程序集提取GitVersion生成的版本,请进行后期生成

以前(在GitVersion v3中),只需要我的
CommonTasks.targets
文件导入GitVersionTask.targets文件,该文件位于GitVersion的NuGet包
\build\dotnet\GitVersionTasks.targets
。这个目标文件依次使用task命令(特别是
GitVersionTask.GetVersion
)执行必要的
,导入后,我可以在自己的
.targets
文件中调用

在v4中,GitVersionTask引入了对UtilPack.NuGet.MSBuild的依赖关系(我收集了各种NuGet命令的帮助信息)。首先,这意味着我需要导入它的
UtilPack.NuGet.MSBuild.props
文件,否则根本不会加载GitVersionTask。但是,在完成此操作之后,我现在在尝试从MSBuild文件中调用
GetVersion
时遇到意外错误。看起来,GetVersion目标现在试图查询我定义的所有NuGet存储库(NuGet.org、本地缓存、我们公司的服务器等)以获得我的库的打包版本,最后我遇到了以下错误:

MSBUILD : NuGetTaskRunnerFactory error NR0001: [NuGet Error]: Unable to find package CommonTasks with version (>= 1.37.0-gitversiontask4-0001) [C:\redacted\CommonTasks\Build.proj] MSBUILD : NuGetTaskRunnerFactory error NR0001: - Found 108 version(s) in Source1 [ Nearest version: 1.36.3 ] [C:\redacted\CommonTasks\Build.proj] MSBUILD : NuGetTaskRunnerFactory error NR0001: - Found 42 version(s) in Source2 [ Nearest version: 1.36.3 ] [C:\redacted\CommonTasks\Build.proj] MSBUILD : NuGetTaskRunnerFactory error NR0001: - Found 0 version(s) in Microsoft Visual Studio Offline Packages [C:\redacted\CommonTasks\Build.proj] MSBUILD : NuGetTaskRunnerFactory error NR0001: - Found 0 version(s) in nuget.org [C:\redacted\CommonTasks\Build.proj] MSBUILD : Task factory error NMSBT003: Failed to find main package CommonTasks@. [C:\redacted\CommonTasks\Build.proj(47,9): error MSB4175: The task factory "Ut ilPack.NuGet.MSBuild.NuGetTaskRunnerFactory" could not be loaded from the assembly "C:\redacted\CommonTasks\packages\UtilPack.NuGet.MSBuild.2.7.0\build\\net46\UtilPack.NuGet.MSBuild.dll". Object ref erence not set to an instance of an object. MSBUILD:NuGetTaskRunnerFactory错误NR0001:[NuGet错误]:找不到版本为的包CommonTasks (>=1.37.0-GitVersionTaskK4-0001)[C:\redact\CommonTasks\Build.proj] MSBUILD:NuGetTaskRunnerFactory错误NR0001:-在Source1中找到108个版本[最接近的版本:1.36.3][C:\Redact\CommonTasks\Build.proj] MSBUILD:NuGetTaskRunnerFactory错误NR0001:-在Source2中找到42个版本[最接近的版本:1.36.3][C:\redact\CommonTasks\Build.proj] 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:\redact\CommonTasks\Build.proj(47,9):错误MSB4175:任务工厂“Ut” 无法从程序集“C:\redacted\CommonTasks\packages\UtilPack.NuGet.MSBuild.2.7.0\build\\net46\UtilPack.NuGet.MSBuild.dll”中加载ilPack.NuGettaskRunneFactory“对象引用” 引用未设置为对象的实例。 我不明白的是,它为什么要尝试NuGet检索,而且,即使这是新的默认行为,我也不知道如何禁用它,或者除此之外,我不知道它为什么不起作用。我假设错误一定与这不是正常的.NET项目有关(也就是说,除了.targets文件、没有.csproj文件等之外,没有其他源代码)。但是我的库被许多普通的.NET项目使用,这些项目本身使用GitVersionTask来自动对其程序集进行版本设置

现在,我已经将我的库固定到GitVersionTask v3上,但我非常想弄清楚如何允许它像以前使用v3一样使用v4。我可能会转而使用GitVersion.CommandLine包,并解析其输出,但我最终需要这些GitVersion生成的版本作为MSBuild属性,以便如果依赖项目也使用GitVersionTask(而不是CLI),则可以方便地使用一个包来实现这两种功能


有没有一种方法可以修复我在GitVersionTask v4上所做的事情,或者有一种完全不同(也许更优雅)的方法来实现我想要做的事情?

请您将项目文件添加到这里,至少有一部分提到了
gitversion