对不包含依赖项的.netstandard项目的项目引用

对不包含依赖项的.netstandard项目的项目引用,.net,.net-core,visual-studio-2017,.net-standard,.net,.net Core,Visual Studio 2017,.net Standard,我在引用net462项目中的netstandard项目时遇到一些问题 当我在MyTests中运行测试时,它抱怨缺少DLL,这些是MyLogging NuGet references(SeriLog)中的DLL。我不想让我的测试引用MyLogging,因为这违背了MyLogging的目的,我也不想在MyLogging中包含测试。是否有办法使项目引用自动包含所有子引用?我不希望在MyTests中包含对MyLogging依赖项的引用,因为我对如何测试不感兴趣,只希望它能够正确地根据配置记录到它应该记录

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

当我在MyTests中运行测试时,它抱怨缺少DLL,这些是MyLogging NuGet references(SeriLog)中的DLL。我不想让我的测试引用MyLogging,因为这违背了MyLogging的目的,我也不想在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>

netstandard1.3
真的
我的测试
  • 目标网络462
  • 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>

net462
如果我使用dotnet cli工具,我可以运行
dotnet test
,并且运行时不会出现问题,因此我假设是VS2017与新的项目格式混淆。

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

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

包装参考
这并没有回答最初的问题,但因为这是我面临的问题,我留下答案是为了其他人的利益

见:

您是否查看了为MyLogging生成的nuspec,看看它是否包含依赖项?在这一步中有各种各样的错误,它们可能会导致错误或丢失(不是因为你的错误)。依赖项应该已经可以传递给项目引用了。请检查serilog二进制文件是否存在于测试项目的bin目录中。但并不是说.net framework测试项目在默认情况下不生成绑定重定向,所以您可能会遇到程序集绑定错误。请参阅相关的@MarcGravel它列在nuspec中,但我使用的不是NuGet包,而是项目参考。@MartinUllrich二进制文件不在日志项目中。由于它是一个.netstandard项目,所有依赖项都列在.deps.json文件中。这可能就是工具无法拾取它们的原因。有没有关于如何补救的建议?