我需要从我的库.net Framework项目中创建一个Nuget包。
问题是我的项目依赖于其他许多我不希望Nuget用户看到的dll。因此,我希望人们安装我的软件包,并在引用列表中仅看到我的项目dll,而其所有依赖项将仅添加到bin文件夹中。
实际上,当我在任何项目中引用此dll时,都会发生这种情况-在引用列表中可以看到它,并且所有依赖项都在构建后立即复制到bin文件夹中。这样的项目可以通过Nuget来实现吗?
答案 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文件夹中。您可以按照以下步骤操作:
在您的项目文件夹(用于创建nuget包的文件夹)中添加一个xx.targets
文件,请确保目标文件的名称与包id({{1} }是我的包裹ID,所以TestDemo
的名字是.targets
)。
在目标文件中添加以下代码:
TestDemo.targets
注意:“ $(MSBuildThisFileDirectory)”的路径应为相对路径,如果不熟悉,可以使用绝对路径。
在nuspec文件中,将所需文件与目标文件一起添加到Build目录中。
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup>
<None Include="$(MSBuildThisFileDirectory)*.dll">
<CopyToOutputDirectory>Always</CopyToOutputDirectory>
</None>
</ItemGroup>
</Project>
打包此程序包,然后将其添加到其他项目进行测试,即可正常工作。
希望这会有所帮助。