如何在调用msbuild pack时将本地DLL引用包含在nuget包中?

时间:2018-03-07 20:29:31

标签: msbuild nuget-package

我们有几个项目需要包含一些静态DLL。因此,项目文件包括如下代码:

   <ItemGroup>
     <Reference Include="..\_Solutions\dependencies\abc123.dll" />
     <Reference Include="..\_Solutions\dependencies\def456.dll" />
     <Reference Include="System.Web" />
   </ItemGroup>

预期:

我们期待这两个dll;将在nupkg文件中找到abc123.dlldef456.dll

实际

但是,nupkg不包含abc123.dlldef456.dll文件。

2 个答案:

答案 0 :(得分:4)

人们总是可以在nuget-package中包含自定义内容。像这样:

<ItemGroup>
  <Content Include="$(OutputPath)\ReferencedLib.dll">
    <Pack>true</Pack>
    <PackagePath>lib\$(TargetFramework)</PackagePath>
  </Content>
</ItemGroup>

如果您定位多个框架:

<PropertyGroup>
  <TargetFrameworks>netstandard2.0;netstandard1.6</TargetFrameworks>
  <TargetsForTfmSpecificContentInPackage>$(TargetsForTfmSpecificContentInPackage);IncludeReferencedProjectInPackage</TargetsForTfmSpecificContentInPackage>
</PropertyGroup>
<Target Name="IncludeReferencedProjectInPackage" Condition="'$(IncludeBuildOutput)' != 'false'">
  <ItemGroup>
    <TfmSpecificPackageFile Include="$(OutputPath)\ReferencedLib.dll" PackagePath="lib/$(TargetFramework)" />
  </ItemGroup>
</Target>

答案 1 :(得分:0)

  

如何在调用msbuild pack时将本地DLL引用包含在nuget包中?

根据the issue on the GitHub,目前NuGet并未直接支持。

我建议的解决方法是使用.nuspec文件:

  

NuGet允许您禁用自动生成结果   .nu​​spec文件和通过设置自动收集文件    项目中的财产,以及   允许您传递替换标记以解析的替换标记的属性   .nu​​spec文件。

有关详细信息,请参阅Martin`s answer