Ame*_*eya 2 msbuild nuget-package visual-studio-2017 .net-standard
我有一个 .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>
Run Code Online (Sandbox Code Playgroud)
这个想法是有 2 个 dll 来包含该任务。在 NuGet 包中包含的项目文件中,不是直接使用 dll 路径<UsingTask>,而是根据属性使用不同的 dll 文件$(MSBuildRuntimeType),该文件位于Core.NET 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)" />
Run Code Online (Sandbox Code Playgroud)
您可以在asp.net core 构建工具和.NET Core SDK中看到这方面的示例。
| 归档时间: |
|
| 查看次数: |
1213 次 |
| 最近记录: |