我正在编写一个需要动态加载nuget软件包的应用程序(它使用Roslyn扫描文档,类型信息等)。
我有一种情况想要加载以下程序包(从csproj文件派生的信息):
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
<AssemblyName>J4JSoftware.Logging</AssemblyName>
<RootNamespace>J4JSoftware.Logging</RootNamespace>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Serilog.Sinks.Console" Version="3.1.1" />
</ItemGroup>
面临的挑战是,我的系统的nuget缓存没有针对netstandard2.0版本的Serilog.Sinks.Console 3.1.1的程序集/ DLL(我也不认为一个在线)。它只有一个用于netstandard1.3。
但我正在扫描的应用程序(即需要Serilog.Sinks.Console 3.1.1 netstandard2.0的应用程序)运行良好。因此,我想将软件包要求解决为netstandard1.3版本...即使项目是netstandard2.0。
问题:
关于在运行时如何解析nuget包的文档的最佳位置是什么?也许我可以在扫描应用程序中复制解析功能。
更好的是,有没有一个可以自动处理分辨率的库?也许这是nuget本身的一部分?我研究了nuget github项目,但没有看到这样的事情,但我并不假装自己是nuget专家。
答案 0 :(得分:1)
我将执行以下操作:nuget update
或nuget list
并通过C#等与控制台进行交互。这样,您就可以得到类似行为的库,但不会烘焙可能会破坏nuget版本的代码。
如here所述,NetStandard 1.3可能可用于Netstandard 2.0(但反之则不行)。
Nuget版本控制将声明您要说的是Netstandard 2.0,而您正在使用的软件包可能会说它支持NetStandard 1.3+(隐式包括Netstandard 2.0)。如果满足您的需求,Nuget将选择最高的一个,在这种情况下,可能是您指定的1.3。有关here的详细信息,请参见nuget如何选择依赖项。我认为这与确定运行时文件夹的方式相同。