Msbuild 在.Net核心项目生成过程中无法加载ITask

Msbuild 在.Net核心项目生成过程中无法加载ITask,msbuild,asp.net-core,.net-core,msbuild-task,Msbuild,Asp.net Core,.net Core,Msbuild Task,我有一个相当简单的类,继承自ITask,作为更新版本的构建任务运行(VersionUpdater.dll)。项目文件条目如下所示: <UsingTask TaskName="VersionUpdater" AssemblyFile="VersionUpdater.dll" /> <Target Name="BeforeBuild"> <VersionUpdater /> </Target> 这对于常规的.Net项目来说非常好;但是,我尝试

我有一个相当简单的类,继承自
ITask
,作为更新版本的构建任务运行(
VersionUpdater.dll
)。项目文件条目如下所示:

<UsingTask TaskName="VersionUpdater" AssemblyFile="VersionUpdater.dll" />
<Target Name="BeforeBuild">
  <VersionUpdater />
</Target>

这对于常规的.Net项目来说非常好;但是,我尝试将其加载到.Net核心项目构建任务中,得到了以下结果:

严重性代码说明项目文件行抑制状态 错误MSB4062无法从中加载“VersionUpdate”任务 程序集C:…\versionUpdate.dll。无法加载文件或程序集 'file:///C:...\VersionUpdater.dll'或其依赖项之一。这个 系统找不到指定的文件。确认 声明是正确的,程序集及其所有依赖项 可用,并且该任务包含实现 Microsoft.Build.Framework.ITask

好的,我想现在可能必须使用.Net Core来构建DLL,所以我创建了
VersionUpdater.Core.DLL
AssemblyFile=“VersionUpdater.Core.DLL”
),并得到了以下错误:

严重性代码说明项目文件行抑制状态 错误MSB4062无法从中加载“VersionUpdate”任务 程序集C:…\VersionUpdater.Core.dll。无法加载文件或文件 程序集'System.Runtime,版本=4.1.0.0,区域性=中性, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。这个 系统找不到指定的文件。确认 声明是正确的,程序集及其所有依赖项 可用,并且该任务包含实现 Microsoft.Build.Framework.ITask

正如我所说,该代码适用于普通的.Net项目。它只是不想使用.Net核心项目。我遗漏了什么?找不到.Net Core的System.Runtime是一个bug吗


(来源如下:)

若要使任务同时使用“dotnet msbuild”和msbuild.exe,您需要交叉编译.NET Framework和.NET核心兼容框架(如.NET Standard)的任务。然后,您需要改变基于哪个任务程序集加载以及MSBuild的运行时类型。您可以使用MSBuildRuntimeType检测此情况。比如说,

 <PropertyGroup>
    <TaskAssembly Condition=" '$(MSBuildRuntimeType)' == 'Core'">.\bin\Debug\netstandard1.6\MyTaskAssembly.dll</TaskAssembly>
    <TaskAssembly Condition=" '$(MSBuildRuntimeType)' != 'Core'">.\bin\Debug\net46\MyTaskAssembly.dll</TaskAssembly>
  </PropertyGroup>

  <UsingTask TaskName="MyTaskName" AssemblyFile="$(TaskAssembly)" />

.\bin\Debug\netstandard1.6\mytasksassembly.dll
.\bin\Debug\net46\mytasksassembly.dll
有关详细说明和示例,请参阅本博客文章