gpt4 book ai didi

msbuild - 通过 Nuget 使用 .NET Standard 和 VS2017 分发自定义 MSBuild 任务

转载 作者:行者123 更新时间:2023-12-02 20:46:35 25 4
gpt4 key购买 nike

我有一个 .NET 标准库 (1.4) VS 2017 项目,其中包含需要通过 Nuget 包分发的自定义 MS 构建任务 (MyTask)(比方说 MyCustomTask.dll,它包含 MyTask 和 Portable.targets,它们将是由目标项目导入)

然后,目标 .NET Standard (1.4) 项目 cspro 文件使用带有自定义构建任务的 Nuget 包来导入调用自定义构建任务的 Portable.targets。

但是,此时我不断收到构建错误无法加载文件或程序集'System.Runtime, Version=4.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'或其依赖项之一。

我尝试了 .NET Standard(1.4、1.5 和 1.6),但出现同样的错误。

最佳答案

问题是消费应用程序(本例中为 MSBuild.exe)需要包含运行 netstandard 任务所需的所有转发程序集(例如依赖于 NETStandard.Library)。

这种情况下的最佳解决方案是将任务库多目标到 .net 框架和 .net 标准目标框架:

<TargetFrameworks>netstandard1.6;net46</TargetFrameworks>

这个想法是有 2 个 dll 来包含该任务。在NuGet包中包含的项目文件中,而不是直接使用<UsingTask>中的dll路径,想法是基于 $(MSBuildRuntimeType) 使用不同的 dll 文件属性,这将是 Core在 MSBuild 的 .NET Core 版本上:

<PropertyGroup>
<_CustomTaskAssemblyTFM Condition="'$(MSBuildRuntimeType)' == 'Core'">netstandard1.6</_CustomTaskAssemblyTFM>
<_CustomTaskAssemblyTFM Condition="'$(MSBuildRuntimeType)' != 'Core'">net46</_CustomTaskAssemblyTFM>
<_CustomTaskAssembly>$(MSBuildThisFileDirectory)..\tools\$(_CustomTaskAssemblyTFM)\CustomTaskAssemblyName.dll</_CustomTaskAssembly>
</PropertyGroup>

<UsingTask TaskName="SomeCustomTask" AssemblyFile="$(_CustomTaskAssembly)" />

您可以在 asp.net core build tools 中查看相关示例和 .NET Core SDK .

关于msbuild - 通过 Nuget 使用 .NET Standard 和 VS2017 分发自定义 MSBuild 任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44149941/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com