当 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 添加了一个随机包,并使用<CopyLocalLockFileAssemblies>
选项重建了项目。软件包 dll 已出现在输出文件夹中。以上是关于当 JUnitTestLogger.dll 是传递依赖时,它不会在构建时复制的主要内容,如果未能解决你的问题,请参考以下文章
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
当用户单击链接时,将变量传递到另一个 url 的选项或方法是啥? [关闭]
当一个对象被当作参数传递到一个方法后,此方法可改变 这个对象的属性,并可返回变化后的结果,那么这里到底是值传 递还是引用传递?