fl0*_*chi 2 c# msbuild nuget packagereference
这里简单设置:
输出: SeriLog DLL不会复制到ProjectA的输出文件夹,也不会复制到TestProject B。从我的角度来看, TestProjectB应该包含 SeriLog.dll。我错过了什么吗?或者还有其他选择可以实现这一目标吗?
备注: 据我从PackageReference 格式规范中理解,我正确使用了属性。
ExcludeAssets属性控制已定义该属性的项目的资产。PrivateAssets控制使用项目 A 的项目的流量。
从您链接的文档中:
排除资产:
这些资产不会被消耗
运行:
lib 和runtimes 文件夹的内容并控制是否将这些程序集复制到构建输出目录
因此,ExcludeAssets="runtime"明确表示“不要复制 dll”。我建议删除ExcludeAssets和的任何使用PrivateAssets,并让 NuGet 使用其默认值。如果您不希望 NuGet 的默认行为,请开始使用这些关键字。
然而,还有另一件事正在发生。你说你的测试项目是一个非SDK风格的项目。可以从 SDK 样式项目以 .NET Framework 为目标,但不幸的是 Visual Studio 的模板将它们称为“.NET Core”或“.NET Standard”,因此人们错误地认为他们无法以 .NET Framework 为目标。无论如何,虽然包对于使用 PackageReference 的项目来说是可传递的,即使没有引用任何包,SDK 样式的项目也始终是 PackageReference。然而,非 SDK 样式的项目则不然。您要么需要在项目中拥有一个 PackageReference,要么将 MSBuild 属性显式设置RestoreProjectStyle为PackageReference。否则,NuGet 将查找 packages.config 文件,如果未找到,NuGet 会认为该项目根本不使用 NuGet。
不过,现在我发现您的测试项目几乎肯定包含对包的引用,至少是测试框架本身。如果这些引用是通过packages.config 进行的,则这是已知的不兼容性。具有对 PackageReference 项目的项目引用的 packages.config 项目无法完全正常工作。反过来有更好的兼容性,或者也可以将测试项目迁移到 PackageReference。老实说,我强烈建议您将所有项目迁移到 SDK 样式,即使您继续以 .NET Framework 为目标。这是 .NET 的未来,并且工具会更好地工作。少一些这些小问题。
如果测试项目已经在使用 PackageReference,那么问题就在于它ExcludeAssets="runtime"正在被传递应用,并且通过将其从引用的项目中删除,它将自动流向测试项目。
| 归档时间: |
|
| 查看次数: |
5645 次 |
| 最近记录: |