Open WenningQiu opened 1 week ago
Update - I see the error on my local machine too, although much less frequently than on Azure DevOps pipeline.
NSwag:
dotnet "C:\Users\qiuw01\.nuget\packages\nswag.msbuild\14.1.0\buildTransitive\../tools/Net80/dotnet-nswag.dll" run nswag.json /variables:Configuration=Release
NSwag command line tool for .NET Core Net80, toolchain v14.1.0.0 (NJsonSchema v11.0.2.0 (Newtonsoft.Json v13.0.0.0))
Visit http://NSwag.org for more information.
NSwag bin directory: C:\Users\qiuw01\.nuget\packages\nswag.msbuild\14.1.0\tools\Net80
Executing file 'nswag.json' with variables 'Configuration=Release'...
CSC : error CS2012: Cannot open 'C:\work\git\os_system\BillComposer\src\BillComposer.API\obj\Debug\net8.0-windows\BillComposer.API.dll' for writing -- 'The process cannot access the file 'C:\work\git\os_system\
BillComposer\src\BillComposer.API\obj\Debug\net8.0-windows\BillComposer.API.dll' because it is being used by another process.' [C:\work\git\os_system\BillComposer\src\BillComposer.API\BillComposer.API.csproj] [
C:\work\git\os_system\BillComposer\src\BillComposer.API.NSwag\BillComposer.API.NSwag.csproj]
System.InvalidOperationException: Unable to retrieve project metadata. Ensure it's an MSBuild-based .NET Core project.If you're using custom BaseIntermediateOutputPath or MSBuildProjectExtensionsPath values,
Use the --msbuildprojectextensionspath option.
at NSwag.Commands.Generation.AspNetCore.ProjectMetadata.ReadUsingMsBuildTargets(List`1 args, String file, String buildExtensionsDir, IConsoleHost console) in /_/src/NSwag.Commands/Commands/Generation/AspNe
tCore/ProjectMetadata.cs:line 160
at NSwag.Commands.Generation.AspNetCore.ProjectMetadata.GetProjectMetadata(String file, String buildExtensionsDir, String framework, String configuration, String runtime, Boolean noBuild, String outputPath
, IConsoleHost console) in /_/src/NSwag.Commands/Commands/Generation/AspNetCore/ProjectMetadata.cs:line 92
at NSwag.Commands.Generation.AspNetCore.AspNetCoreToOpenApiCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in /_/src/NSwag.Commands/Commands/Generation/AspNetCore/AspNetCoreToOpenApiCom
mand.cs:line 70
at NSwag.Commands.NSwagDocumentBase.GenerateSwaggerDocumentAsync() in /_/src/NSwag.Commands/NSwagDocumentBase.cs:line 270
at NSwag.Commands.NSwagDocument.ExecuteAsync() in /_/src/NSwag.Commands/NSwagDocument.cs:line 67
at NSwag.Commands.Document.ExecuteDocumentCommand.ExecuteDocumentAsync(IConsoleHost host, String filePath) in /_/src/NSwag.Commands/Commands/Document/ExecuteDocumentCommand.cs:line 76
at NSwag.Commands.Document.ExecuteDocumentCommand.RunAsync(CommandLineProcessor processor, IConsoleHost host) in /_/src/NSwag.Commands/Commands/Document/ExecuteDocumentCommand.cs:line 33
at NConsole.CommandLineProcessor.ProcessSingleAsync(String[] args, Object input)
at NConsole.CommandLineProcessor.ProcessAsync(String[] args, Object input)
at NSwag.Commands.NSwagCommandProcessor.ProcessAsync(String[] args) in /_/src/NSwag.Commands/NSwagCommandProcessor.cs:line 65
C:\work\git\os_system\BillComposer\src\BillComposer.API.NSwag\BillComposer.API.NSwag.csproj(69,5): error MSB3073: The command "dotnet "C:\Users\qiuw01\.nuget\packages\nswag.msbuild\14.1.0\buildTransitive\../too
ls/Net80/dotnet-nswag.dll" run nswag.json /variables:Configuration=Release" exited with code -1.
The error happens intermittently. That is usually because of parallelism.
It's a file in a project called BillComposer.BL.csproj
, and your NSwag invocation is from BillComposer.API.NSwag.csproj
. If no direct or indirect dependencies exist between these two projects, the builds may occur in parallel, triggering the problem.
If you can't add the former as a dependency on the latter, perhaps you can try to set the build order explicitly in Visual Studio... just a thought.
I added the following project dependency as suggested. I am still getting the error above that Wenning mentions.
EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BillComposer.API.NSwag", "src\BillComposer.API.NSwag\BillComposer.API.NSwag.csproj", "{30B86CD0-25C4-4F7E-8B1F-4BAD9498DF1D}" ProjectSection(ProjectDependencies) = postProject {9DB34C69-3CB7-4FB0-B2BA-DB3F65217051} = {9DB34C69-3CB7-4FB0-B2BA-DB3F65217051} {ACE9289D-70F8-4615-B947-D0D6ED0857ED} = {ACE9289D-70F8-4615-B947-D0D6ED0857ED} EndProjectSection EndProject
(I'm a coworker of Serena and Wenning) We're trying some other changes on our end, and will come back to this ticket if we are still stuck after. Thanks again, NSwag team.
I don't use .sln mods, but the .csproj way
<ProjectReference Include="...\BillComposer.BL.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
My application is seeing intermittent build failure after being migrated to .NET 8.0 with NSwag.MSBuild upgraded to 14.1.0. So far we have been seeing the error only when the application is built by Azure DevOps pipeline and not when built locally.
The error seems to be started with a file access error: "The process cannot access the file 'D:\csg-azure-agent_work\1241\s\Bin\Debug\net8.0-windows\BillComposer.BL.deps.json' because it is being used by another process. [D:\csg-azure-agent_work\1241\s\src\BillComposer.BL\BillComposer.BL.csproj]".
The file access error has always been on the same file in the failed builds. I am not sure why NSwag needs to access that file in Debug folder when the command file specifies Release build: "dotnet "D:\Cache.nuget\packages\nswag.msbuild\14.1.0\buildTransitive../tools/Net80/dotnet-nswag.dll" run nswag.json /variables:Configuration=Release"
Below are the .csproj snippet that is relavant to NSwag:
Below is the content of nswag.json file: