升级测试项目至MSBuild SDK格式后,MSTest包编译报NU5100错误求助
解决NU5100错误:MSTest程序集不在lib文件夹的问题
这个问题我之前也碰到过,核心原因是.NET Core SDK版本升级后,把之前的警告直接改成了错误——你的测试项目在执行打包(Pack)操作时,错误地将MSTest适配器的程序集纳入了打包内容,但这些文件不符合NuGet包的规范(不在lib目录下)。下面给你几个实用的解决方案:
方案一:禁用测试项目的打包功能(最推荐)
测试项目通常不需要打包成NuGet包发布,直接在你的.csproj文件里添加以下配置,彻底跳过打包相关任务,自然就不会触发这个错误:
<PropertyGroup> <IsPackable>false</IsPackable> </PropertyGroup>
方案二:排除不符合规范的文件(如果必须打包)
如果你确实需要把这个测试项目打包成NuGet包(比如作为测试工具包),就在.csproj里添加配置,移除那些被错误标记为Content的MSTest相关dll:
<ItemGroup> <!-- 批量移除content和contentFiles目录下的所有dll --> <Content Remove="content\**\*.dll" /> <Content Remove="contentFiles\**\*.dll" /> </ItemGroup>
或者更精准地只排除报错的那个文件:
<ItemGroup> <Content Remove="content\Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.dll" /> <Content Remove="contentFiles\any\net45\Microsoft.VisualStudio.TestPlatform.MSTestAdapter.PlatformServices.dll" /> </ItemGroup>
这些dll是MSTest测试运行时的依赖组件,本来就不应该被包含到你的项目打包内容里,移除后NuGet打包时就不会再检查它们的位置了。
方案三:升级MSTest NuGet包到最新版本
这个问题可能是旧版MSTest包的结构和新版.NET Core SDK不兼容导致的,尝试把MSTest.TestAdapter和MSTest.TestFramework升级到最新稳定版本,大概率能自动修复文件位置的问题,不需要手动配置。
补充说明
为什么旧版SDK(2.1.104)只是警告,新版(2.1.300)变成错误?因为微软在后续SDK版本中,把NU5100这类NuGet包结构不规范的问题从警告提升为错误,目的是强制开发者打包符合规范的NuGet包,避免其他用户安装后出现无法引用程序集的问题。
内容的提问来源于stack exchange,提问作者Hamid Shahid
相关产品推荐
相关产品推荐

