【问题标题】:Distribute custom MS Build Task with .NET Standard and VS 2017 via Nuget通过 Nuget 使用 .NET Standard 和 VS2017 分发自定义 MSBuild 任务
【发布时间】:2017-05-24 05:47:27
【问题描述】:

我有一个 .NET Standard 库 (1.4) VS 2017 项目,其中包含需要通过 Nuget 包分发的自定义 MS Build 任务 (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 nuget-package .net-standard visual-studio-2017


    【解决方案1】:

    问题在于,在这种情况下,消费应用程序 MSBuild.exe 需要包含运行 netstandard 任务所需的所有转发程序集(例如,依赖于 NETStandard.Library)。

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

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

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

    <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 中看到这方面的示例。

    【讨论】:

    • 感谢指点...我会看例子再回复你。
    猜你喜欢
    • 1970-01-01
    • 2018-02-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-14
    相关资源
    最近更新 更多