解决nuget包引用

时间:2019-07-18 21:52:55

标签: c# nuget

我正在编写一个需要动态加载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专家。

1 个答案:

答案 0 :(得分:1)

我将执行以下操作:nuget updatenuget 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如何选择依赖项。我认为这与确定运行时文件夹的方式相同。