Roslyn 警告编译 .Net Framework 应用程序

18
我在我的C# .Net Framework 4.8应用程序中突然出现了以下警告。 我已经删除了所有的bin和obj文件夹,并尝试删除和安装DotNetCompilerPlatfrom包,但是这个消息仍然出现。有什么想法吗?
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition within target references itself via (qualified or unqualified) metadatum 'RecursiveDir'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition within target references itself via (qualified or unqualified) metadatum 'Filename'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets(13,9): message : MSB4120: Item 'RoslynCompilerFiles' definition within target references itself via (qualified or unqualified) metadatum 'Extension'. This can lead to unintended expansion and cross-applying of pre-existing items. More info: https://aka.ms/msbuild/metadata-self-ref

(我已从错误中删除了具体的目录信息)
点击错误后显示了下面的XML,但这是包的一部分,所以我不知道它为什么突然显示为警告。
<Target Name="SetRoslynCompilerFiles" >
  <Message Text="Using Roslyn from '$(RoslynToolPath)' folder" />
  <ItemGroup>
    <RoslynCompilerFiles Include="$(RoslynToolPath)\*">
      <Link>roslyn\%(RecursiveDir)%(Filename)%(Extension)</Link>  <---- Error line
    </RoslynCompilerFiles>
  </ItemGroup>
</Target>

完整的 XML 文件在这里找到:
\packages\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.4.1.0\build\net472\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.targets

4
自从我将VS 2022更新到最新版本(17.7.1)以来,每当我构建解决方案时,过去几天里都会看到相同的消息。 - JohnnyHK
@JohnnyHK 我没有考虑到这个更新。是的,我最近进行了更新。很可能是从那时开始的。 - Simon Parker
2个回答

33
修复方法已发布在这里:
删除以下行:
<RoslynCompilerFiles Include="$(RoslynToolPath)\*">
    <Link>roslyn\%(RecursiveDir)%(Filename)%(Extension)</Link>
</RoslynCompilerFiles>

请将以下行添加进去:
<RoslynCompilerFiles Include="$(RoslynToolPath)\**\*" />

https://github.com/aspnet/RoslynCodeDomProvider/issues/154


这对我有帮助。 - John Livermore
完美地完成了。谢谢。 - Simon Parker
1
很好,也解决了我的问题。就像@JohnnyHK一样,这个问题是我升级到VS 2022 v17.7.1之后开始的。 - Tom Regan
1
我也遇到了这个问题,即使更新了所有的软件包。在安装VS Pro Version 17.7.2之后突然出现了这个问题。真的希望你的PR被合并并且尽快发布新版本,因为手动编辑目标不能解决CI/CD的问题。 - Dan
1
虽然这个调整似乎解决了警告,但我宁愿等待上游修复,而不是在静态库文件中进行乱改。 - undefined
对我来说有效,谢谢提供信息。 - undefined

0
确保项目中的所有NuGet包都是最新的,特别是Microsoft.CodeDom.Providers.DotNetCompilerPlatform包。您可以通过在解决方案资源管理器中右键单击项目,然后选择“管理NuGet包”来完成此操作。将所有包更新到最新版本。
或者您可以尝试暂时移除该包:作为调试目的的临时措施,您可以尝试暂时从项目中移除Microsoft.CodeDom.Providers.DotNetCompilerPlatform包,以查看警告是否消失。如果警告消失,则可能表示该包版本存在特定问题。

1
我已经更新了所有内容(抱歉,我忘记在我的问题中注明这一点)。 考虑到这是最新的稳定版本,如果是特定的软件包问题,我会期望更多人遇到相同的问题。我希望有其他人也见过这个问题。 - Simon Parker
我也遇到了这个问题,即使更新了所有的软件包。在安装VS Pro版本17.7.2之后突然出现了这个问题。修改目标不会有帮助,因为那是外部软件包的一部分,这意味着问题将在CI/CD上持续存在。 - Dan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接