.net core 如何通过MSBuild包目标将ref程序集添加到NuGet包?

.net core 如何通过MSBuild包目标将ref程序集添加到NuGet包?,.net-core,msbuild,nuget,nuget-package,dotnet-sdk,.net Core,Msbuild,Nuget,Nuget Package,Dotnet Sdk,我正在开发一个库,目标是net35(.NET Framework 3.5)、netstandard2.0(.NET Standard 2.0)和netcoreapp3.1(.NET Core 3.1) 对于其中一项功能,库在内部使用,因此此功能仅在针对net35(.NET Framework 3.5)和netcoreapp3.1(.NET Core 3.1)时有效 我使用MSBuild为我的库创建NuGet包,但由于WPF用于netcoreapp3.1,因此我也为netcoreapp3.1创建,

我正在开发一个库,目标是net35(.NET Framework 3.5)、netstandard2.0(.NET Standard 2.0)和netcoreapp3.1(.NET Core 3.1)

对于其中一项功能,库在内部使用,因此此功能仅在针对net35(.NET Framework 3.5)和netcoreapp3.1(.NET Core 3.1)时有效

我使用MSBuild为我的库创建NuGet包,但由于WPF用于netcoreapp3.1,因此我也为netcoreapp3.1创建,以便非Windows平台上的使用者在构建项目时使用该引用程序集,如本节所述


我的问题是:如何指示MSBuild将创建的NuGet软件包包含在“ref/”文件夹中?

我也在上问了这个问题,我得到的答案是没有本地支持,因此我实施了一个解决方法,并将其发布在此处供其他人使用:

<!-- Generate also reference assembly. -->
<!-- See: -->
<!-- https://docs.microsoft.com/en-us/dotnet/standard/assembly/reference-assemblies#generating-reference-assemblies -->
<!-- https://github.com/dotnet/roslyn/blob/master/docs/features/refout.md -->
<PropertyGroup>
  <ProduceReferenceAssembly>true</ProduceReferenceAssembly>
</PropertyGroup>

<!-- This is a workaround until better support for \ref (Reference Assembly) is added in Pack target. -->
<!-- See: -->
<!-- https://docs.microsoft.com/en-us/nuget/create-packages/select-assemblies-referenced-by-projects#packagereference-support -->
<!-- Need a away to specify \ref (Reference Assembly) as target folder in Pack target (https://github.com/NuGet/Home/issues/4184) -->
<PropertyGroup>
  <!-- Supress warning NU5131 (https://docs.microsoft.com/en-us/nuget/reference/errors-and-warnings/nu5131) which is reported because .nuspec file is not updated -->
  <!-- to contain <references> element (https://docs.microsoft.com/en-us/nuget/reference/nuspec#explicit-assembly-references) for all files inside the 'ref\' directory.  -->
  <NoWarn>$(NoWarn),NU5131</NoWarn>
  <!-- See https://docs.microsoft.com/en-us/nuget/reference/msbuild-targets#targetsfortfmspecificcontentinpackage -->
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);AddRefAssemblyToPackage</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>
<Target Name="AddRefAssemblyToPackage">
  <!-- Add reference assembly and XML documentation to 'ref/'. -->
  <ItemGroup Condition=" Exists('$(BaseOutputPath)$(Configuration)\$(TargetFramework)\ref\$(AssemblyName).dll') ">
    <TfmSpecificPackageFile Include="$(BaseOutputPath)$(Configuration)\$(TargetFramework)\ref\$(AssemblyName).dll" PackagePath="ref/$(TargetFramework)" />
    <TfmSpecificPackageFile Include="$(BaseOutputPath)$(Configuration)\$(TargetFramework)\$(AssemblyName).xml" PackagePath="ref/$(TargetFramework)" />
  </ItemGroup>
</Target>

真的
$(诺瓦恩),5131号
$(targetsfortfmspecificcontentPackage);添加重新组装到包装中