创建一个没有其依赖项的Nuget包以添加为引用

时间:2018-10-22 13:16:44

标签: visual-studio dependencies nuget package nuspec

我需要从我的库.net Framework项目中创建一个Nuget包。

问题是我的项目依赖于其他许多我不希望Nuget用户看到的dll。因此,我希望人们安装我的软件包,并在引用列表中仅看到我的项目dll,而其所有依赖项将仅添加到bin文件夹中。

实际上,当我在任何项目中引用此dll时,都会发生这种情况-在引用列表中可以看到它,并且所有依赖项都在构建后立即复制到bin文件夹中。这样的项目可以通过Nuget来实现吗?

3 个答案:

答案 0 :(得分:1)

我尝试了Leo Liu-MSFT的解决方案。它可以在.NET Framework项目中工作,但不能在.NET Core 3.0中工作

答案 1 :(得分:0)

如果您要使用packages.config来管理库的NuGet依赖关系并使用nuget.exe pack构建nupkg,那么我相信您将需要生成自己的nuspec文件,而不必添加构建时依赖关系作为对程序包的依赖。

如果您使用的是PackageReference,则可以使用PrivateAssets

<ItemGroup>
    <!-- ... -->
    <PackageReference Include="Contoso.Utility.UsefulStuff" Version="3.6.0">
        <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <!-- ... -->
</ItemGroup>

答案 2 :(得分:0)

  

创建一个不包含其依赖项的Nuget软件包作为参考

由于您不希望Nuget用户看到其他dll,因此您不能将这些dll文件设置为依赖项,默认情况下会将其添加到引用列表中。

要解决此问题,我们需要将这些dlls文件添加到.nuspec文件的另一个文件夹中,并在将此nuget包添加到项目中时添加一个函数将此dlls文件复制到bin文件夹中。您可以按照以下步骤操作:

  1. 在您的项目文件夹(用于创建nuget包的文件夹)中添加一个xx.targets文件,请确保目标文件的名称与包id({{1} }是我的包裹ID,所以TestDemo的名字是.targets)。

  2. 在目标文件中添加以下代码:

    TestDemo.targets

注意:“ $(MSBuildThisFileDirectory)”的路径应为相对路径,如果不熟悉,可以使用绝对路径。

  1. 在nuspec文件中,将所需文件与目标文件一起添加到Build目录中。

    <Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
     <ItemGroup>
      <None Include="$(MSBuildThisFileDirectory)*.dll">
         <CopyToOutputDirectory>Always</CopyToOutputDirectory>
      </None>
     </ItemGroup>
    </Project>
    
  2. 打包此程序包,然后将其添加到其他项目进行测试,即可正常工作。

enter image description here

enter image description here

希望这会有所帮助。