【问题标题】:project reference to a .netstandard project not including dependencies对 .netstandard 项目的项目引用,不包括依赖项
【发布时间】:2017-11-02 15:43:11
【问题描述】:

我在从 net462 项目中引用 netstandard 项目时遇到了一些问题。

当我在 MyTests 中运行测试时,它抱怨缺少 dll,这些是来自 MyLogging NuGet 引用 (SeriLog) 的 dll。我不希望 MyTests 对 MyLogging 进行 NuGet 引用,因为这违背了它的目的,我也不希望在 MyLogging 中包含测试。有没有办法让项目引用自动包含所有子引用?我宁愿不在 MyTests 中包含对 MyLogging 依赖项的引用,因为我对测试方法不感兴趣,只是它正确地记录到基于配置的任何内容。在测试项目中包含 MyLogging 依赖项会泄漏实现,如果我决定以不同的方式登录,我将不得不维护引用。

我的日志

  • 目标 netstandard1.3
  • 作为 NuGet 发布以供其他项目使用
  • 依赖项(此处为 SeriLog)被引用为 NuGet 包

csproj 文件。

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard1.3</TargetFramework>
    <GeneratePackageOnBuild>True</GeneratePackageOnBuild>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.2" />
    <PackageReference Include="Serilog" Version="2.4.0" />
    <PackageReference Include="Serilog.Extensions.Logging" Version="1.4.0" />
    <PackageReference Include="Serilog.Sinks.ColoredConsole" Version="2.0.0" />
  </ItemGroup>
</Project>

我的测试

  • 目标 net462
  • 对 MyLogging 的项目参考。

csproj 文件

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>net462</TargetFramework>
  </PropertyGroup>
  <ItemGroup>
    <PackageReference Include="FluentAssertions" Version="4.19.2" />
    <PackageReference Include="Microsoft.Extensions.Logging.Abstractions" Version="1.1.2" />
    <PackageReference Include="NSubstitute" Version="2.0.3" />
    <PackageReference Include="xunit" Version="2.2.0" />
    <PackageReference Include="xunit.analyzers" Version="0.1.0" />
    <PackageReference Include="xunit.categories" Version="1.0.0" />
    <PackageReference Include="xunit.runner.visualstudio" Version="2.2.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="MyLogging\MyLogging.csproj" />
  </ItemGroup>
</Project>

如果我使用 dotnet cli 工具,我可以运行 dotnet test 并且它运行没有问题,所以我假设是 VS2017 与新的项目格式混淆了。

【问题讨论】:

  • 您是否查看了为 MyLogging 生成的 nuspec 以查看它是否包含依赖项?该步骤中存在各种错误,这些错误可能会使它们出错或丢失(不是您的错)。
  • 依赖项应该已经为项目引用传递。请检查 serilog 二进制文件是否存在于您的测试项目的 bin 目录中。但并非 .net 框架测试项目默认不会生成绑定重定向,因此您可能会遇到程序集绑定错误。查看相关stackoverflow.com/questions/43995432/…
  • @MarcGravell 是在nuspec中列出的,但是我用的不是NuGet包,而是项目参考。
  • @MartinUllrich 二进制文件不在日志记录项目中。由于它是一个 .netstandard 项目,所有依赖项都列在 .deps.json 文件中。这可能是工具没有拾取它们的原因。有关如何解决此问题的任何建议?

标签: .net .net-core visual-studio-2017 .net-standard


【解决方案1】:

对于旧式项目(旧 .csproj 格式),您必须将以下内容添加到 .csproj 文件中:

<PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>

这并没有回答最初的问题,但由于这是我面临的问题,所以为了他人的利益,我留下了答案。

见: Referencing .NET Standard Assemblies from both .NET Core and .NET Framework

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-20
    • 1970-01-01
    • 2020-05-15
    • 1970-01-01
    • 1970-01-01
    • 2018-05-06
    • 1970-01-01
    相关资源
    最近更新 更多