当 JUnitTestLogger.dll 是传递依赖时,它不会在构建时复制

Posted

技术标签:

【中文标题】当 JUnitTestLogger.dll 是传递依赖时,它不会在构建时复制【英文标题】:JUnitTestLogger.dll is not copied on build when it is a transitive dependency 【发布时间】:2020-07-28 17:10:12 【问题描述】:

我正在为几个解决方案中的所有测试项目制作一个核心包。依赖图是这样的:

MyTests.csproj -> MyTestFramework (nuget package) -> JUnitTestLogger (nuget package)

问题是 JUnitTestLogger.dll 必须复制到 MyTests.csproj 构建的输出文件夹中,否则它不起作用。好的,我补充:

<CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>

MyTests.csproj 并再次构建。结果,输出文件夹中有每个传递依赖 dll ......除了 JUnitTestLogger.dll。我检查了它的源代码JUnitTestLogger.csproj 并没有发现什么特别之处。

这个包有什么问题,为什么没有复制?我在这里问,而不是在 Github 上问,因为该项目的 repo 的活动很少。

MyTests.csproj:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <CopyLocalLockFileAssemblies>true</CopyLocalLockFileAssemblies>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="MyTestFramework" Version="1.2.3" />
  </ItemGroup>
</Project>

MyTestFramework.csproj(部分):

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <IsPackable>true</IsPackable>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="JUnitTestLogger" Version="1.1.0" />
  </ItemGroup>
</Project>

自动生成的MyTestFramework.nuspec(部分):

<dependencies>
  <group targetFramework=".NETCoreApp2.2">
    <dependency id="JUnitTestLogger" version="1.1.0" exclude="Build,Analyzers" />
  </group>
</dependencies>

【问题讨论】:

【参考方案1】:

我是 JunitXml.TestLogger 的维护者(一个比你提到的更新的包,但两者都是从 Github/Spekt 中的同一源分叉并共享一些代码)。我知道测试记录器不寻常的主要事情是它们在您的项目中被引用,但未被代码使用。

我没有看到这个特定的问题,但过去有几个like this one 在构建时没有复制库。当我第一次使用这些库时,我不得不在我的 CI 构建中添加额外的步骤来复制库。据我回忆,我的解决方案与问题中的解决方案相同,即从 msbuild 切换到 @987654324 @。所以也许那个或其他已解决的问题之一会提供线索。

【讨论】:

“引用但未使用”不是问题。我刚刚从 nuget 添加了一个随机包,并使用 &lt;CopyLocalLockFileAssemblies&gt; 选项重建了项目。软件包 dll 已出现在输出文件夹中。

以上是关于当 JUnitTestLogger.dll 是传递依赖时,它不会在构建时复制的主要内容,如果未能解决你的问题,请参考以下文章

当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?

当用户单击链接时,将变量传递到另一个 url 的选项或方法是啥? [关闭]

值传递和引用传递

Java值传递和引用传递

仅当它们从容器传递时如何显示反应数字道具?

当一个对象被当作参数传递到一个方法后,此方法可改变 这个对象的属性,并可返回变化后的结果,那么这里到底是值传 递还是引用传递?