我们试图控制nugets的版本,方法是将它们托管在我们自己的Artifactory上,而不是在nuget.org上,同时尝试将多个nuget打包到一个中。
这方面的例子是Aspose。
我想创建一个名为AsposeTools的新库,它有我们自己的助手函数。
AsposeTools参考文献:Aspose.Cells和Aspose.PDF.
当我在我的项目中安装AsposeTools时,我希望看到和Aspose.PDF,这样我就可以调用我的助手函数和实际的Aspose函数。但我希望Apose.Cells和Aspose.PDF由AsposeTools“安装”,而不是从我们的工件或nuget.org复制的依赖项。原因是,我们需要在工件和工具中维护单元格和pdf的版本。
如何从nuget内部判断是否存在依赖关系,而不是nuget源代码。
我尝试在AsposeTools中创建一个libs文件夹,并将额外的dll添加到该文件夹中,并将它们添加为引用。然后,我尝试了构建操作的所有不同选项,将复制设置为Output 设置为all。我所能得到的最好结果是,根据文件大小,AsposeTools包含了额外的dll,但实际上我无法在代码中重新定义它们,只有我的助手函数。Aspose.Cells和Aspose.PDF实际上没有放在项目引用中。
编辑:我目前使用.csproj来构建nuget
发布于 2020-09-24 09:57:28
如果我的评论是正确的,您可以将这些Apose.Cells.dll
和Aspose.PDF.dll
设置为程序集引用,这样它就不会从nuget.org
中将它们作为nuget包安装。
备注:它将忽略nuget包的任何依赖项,如果需要,可以使用相同的方式自动添加它们。
( -->Properties ) 1)单击依赖项上的这些nuget包,然后将其Private Asserts
设置为All
。
然后是,右键单击项目->卸载项目,然后单击重新加载项目以启用设置。
2)输入项目的xxx.csproj
文件,然后添加以下内容:
<PropertyGroup>
<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
</PropertyGroup>
<ItemGroup>
<None Include="$(OutputPath)Aspose.Cells.dll" Pack="true" PackagePath="lib\$(TargetFramework)"></None>
<None Include="$(OutputPath)Aspose.PDF.dll" Pack="true" PackagePath="lib\$(TargetFramework)"></None>
// you can add any dependency dlls of the output folder in this way as you want
</ItemGroup>
3)重新打包项目,在安装新版本时,首先应该删除C:\Users\xxx(current user)\.nuget\packages
下的清理nuget缓存或缓存文件。
当您安装新的AsposeTools包时,它不会将其他两个包安装为来自nuget.org
的nuget依赖项。它们仅被主项目引用为程序集引用,并复制到输出文件夹中。
ConsoleApp2是新的主项目,我已经将新版本的AsposeTools包安装到我的项目中。这就是效果:
https://stackoverflow.com/questions/64034408
复制相似问题