首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >dotnet.exe锁定SonarScanner.MSBuild.Common.dll

dotnet.exe锁定SonarScanner.MSBuild.Common.dll
EN

Stack Overflow用户
提问于 2018-06-01 04:25:39
回答 5查看 3.4K关注 0票数 4

晚上好,

我在Jenkins的一个2.1项目中使用了这里的https://docs.sonarqube.org/display/SCAN/Analyzing+with+SonarQube+Scanner+for+MSBuild的.Net Core2.0版本:

代码语言:javascript
复制
withSonarQubeEnv('SonarQubeMain') {
    bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll begin /k:\"${globals.SONAR_QUBE_PROJECT}\" /d:sonar.host.url=${globals.SONAR_HOST_URL} /d:sonar.cs.xunit.reportsPaths=\"XUnit.xml\" /d:sonar.cs.opencover.reportsPaths=\"coverage.xml\"
}

bat "dotnet build --version-suffix ${env.BUILD_NUMBER}"

dir('test/mytestprojecthere') {
    bat 'D:\\OpenCover\\OpenCover.Console.exe -target:"c:\\Program Files\\dotnet\\dotnet.exe" -targetargs:"xunit --no-build -xml XUnit.xml" -output:coverage.xml -oldStyle -filter:"-[*Tests*]*" -register:user'
}
withSonarQubeEnv('SonarQubeMain') {
    bat "dotnet ${globals.SONAR_QUBE_MSBUILD_PATH}\\SonarScanner.MSBuild.dll end"
}

它可以在第一次构建时工作,但在下一次构建时会失败,如下所示:

代码语言:javascript
复制
Failed to create an empty directory 'D:\Jenkins\workspace\xxxxxxxx\.sonarqube'. 
Please check that there are no open or read-only files in the directory and that you have the necessary read/write permissions.

Detailed error message: Access to the path 'SonarScanner.MSBuild.Common.dll' is denied.

检查我的windows服务器,我可以看到多个.Net核心主机后台进程。如果我杀了这些我可以再建一次..

我读到了有关msbuild的MSBuild /nodereuse:false,但似乎不适用于dotnet核心版本?

EN

回答 5

Stack Overflow用户

发布于 2018-06-21 19:20:04

仅供参考@Nauzet在MSBuild repo:#535的扫描器中为此打开了一个问题。

总结一下:

  • 开始和结束步骤似乎运行得很好,并且dotnet.exe按照预期关闭了这些进程
  • 在构建复杂的解决方案时,启动了多个dotnet.exe实例,并且在构建完成后不会立即关闭。在较简单的解决方案中似乎不会出现此问题。如果使用dotnet build或dotnet msbuild
  • workarounds: build直接使用msbuild或使用dotnet build /nodereuse:false

触发生成阶段,则会发生此问题。

仅供参考,MSBuild扫描程序有几个在构建阶段调用的自定义任务。它们使用被锁定的程序集。定制任务没有什么不寻常之处;它们只是从磁盘上的文件中读取数据。在这一点上,我不相信这是MSBuild扫描器的问题。

票数 5
EN

Stack Overflow用户

发布于 2018-10-05 21:15:46

我们刚刚面对这个问题,并发现它与dotnet和msbuild重用以前的多线程构建留下运行的节点有关。

要避免此问题,请在命令行中使用/nodereuse:false/nr:false,如下所示:

代码语言:javascript
复制
msbuild /m /nr:false myproject.proj

msbuild /m /nodereuse:false myproject.proj

dotnet restore myproject.sln /nodereuse:false
票数 4
EN

Stack Overflow用户

发布于 2019-01-08 20:13:40

我遇到了同样的问题,运行下面的命令解决了这个问题。

代码语言:javascript
复制
dotnet build-server shutdown

这是由于重用msbuild节点造成的。我们让msbuild节点保持活动状态,目的是在进行连续构建时节省启动时间。

它也可以通过设置以下环境变量来关闭。

代码语言:javascript
复制
MSBUILDDISABLENODEREUSE=1
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50632277

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档