【问题标题】:Resolving nuget package references解决 nuget 包引用
【发布时间】:2019-07-19 06:08:34
【问题描述】:

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

【问题讨论】:

    标签: c# nuget


    【解决方案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,如您所指示的。有关 nuget 如何选择依赖项的详细信息是 here。我认为这与它确定运行时文件夹的方式相同。

    【讨论】:

    • 阅读您提供的有关 nuget 如何选择依赖项的链接,我似乎可以通过解析 obj/project.assets.json 文件来找出正在解析的特定 DLL。谢谢你的信息!
    猜你喜欢
    • 2018-01-07
    • 2012-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多