如何将<frameworkassembly>添加到从csproj生成的nuget包中

时间:2017-06-09 14:46:28

标签: msbuild nuget visual-studio-2017

我正在使用VS2017和新的csproj文件格式来创建nuget包。

在我的csproj文件中,我有以下内容:

<ItemGroup>
   <Reference Include="System.Net" />
</ItemGroup>

构建它时,哪个工作正常(TargetFrameworks == net45)。但是当我将它打包在nuget包中时,我希望目标包将其作为

<frameworkAssemblies>
  <frameworkAssembly assemblyName="System.Net" targetFramework="net45" />
</frameworkAssemblies>

我如何使用这种新工具做到这一点?

1 个答案:

答案 0 :(得分:1)

这是当前1.0.*工具的限制。在即将推出的&#34; .NET SDK&#34;版本1.1.*2.0.*版本中,这将自动完成,所有<Reference>个元素作为框架程序集添加到生成NuGet包(除非它们标有Pack="false")。这些变化也将成为VS 2017 15.3的一部分(在撰写本文时尚未发布)。请注意,我说的是工具(安装了SDK的dotnet --version)版本,而不是.NET Core运行时版本。

有一种方法可以使用包目标的当前预览包,覆盖SDK提供的包 - 注意这是一种非常糟糕的方式,一旦使用新的1.1或2.0工具就应该删除。

<Project>
  <PropertyGroup>
    <NuGetBuildTasksPackTargets>junk-value-to-avoid-conflicts</NuGetBuildTasksPackTargets>
  </PropertyGroup>
  <Import Project="Sdk.props" Sdk="Microsoft.NET.Sdk" />

  <!-- All your project's other content here -->

  <ItemGroup>
    <PackageReference Include="NuGet.Build.Tasks.Pack" Version="4.3.0-preview1-4045" PrivateAssets="All" />
  </ItemGroup>
  <Import Project="Sdk.targets" Sdk="Microsoft.NET.Sdk" />
</Project>

另请参阅related GitHub issue on the NuGet repo此变通办法的信息源自哪里。