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
有关详细说明和示例,请参阅本博客文章