Azure Pipeline中Microsoft Tests读取文件失败求助
解决Azure Pipeline中测试项目找不到JSON文件的问题
先确认.runsettings的部署配置是否生效
你的.runsettings文件必须明确开启部署,配置要写成这样:
<RunSettings> <DeploymentEnabled>True</DeploymentEnabled> </RunSettings>
划重点:如果是.NET Core/.NET 5+的测试项目,[DeploymentItem]基本没用,这类项目靠的是输出目录复制,不是老的测试部署机制,直接把这个特性删了就行。
调整文件读取的路径逻辑
本地测试和Pipeline的工作目录不一样,别用硬编码的相对路径,改成基于测试程序集的输出目录来拼路径:
var outputDir = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location); var jsonPath = Path.Combine(outputDir, "jsontest", "json1.json"); var jsonContent = File.ReadAllText(jsonPath);
同时检查.csproj里有没有正确包含这个文件,确保复制规则生效:
<ItemGroup> <Content Include="jsontest\json1.json"> <CopyToOutputDirectory>Always</CopyToOutputDirectory> </Content> </ItemGroup>
检查Azure Pipeline的测试任务配置
如果用DotNetCoreCLI test任务,要通过--settings参数指定你的.runsettings文件路径,比如:
- task: DotNetCoreCLI@2 inputs: command: 'test' projects: '**/*Tests.csproj' arguments: '--settings $(Build.SourcesDirectory)/YourTestProject/YourSettings.runsettings'
要是用VSTest任务,直接在任务设置里指定.runsettings文件就行。
先验证文件是否真的被复制到Pipeline里
可以在测试任务前加个PowerShell任务,搜一下文件有没有:
- task: PowerShell@2 inputs: targetType: 'inline' script: | Get-ChildItem -Path $(Build.BinariesDirectory) -Recurse -Name "json1.json"
如果搜不到,说明文件没被正确复制到输出目录,回去检查.csproj的配置或者VS里的文件属性。
内容的提问来源于stack exchange,提问作者Enrico
相关产品推荐
相关产品推荐

