【问题标题】:CSC: error CS0041: Unexpected error writing debug information -- 'Operation is not supported on this platform.'CSC:错误 CS0041:写入调试信息时出现意外错误——“此平台不支持操作。”
【发布时间】:2023-04-01 08:34:01
【问题描述】:

刚刚下载了 Visual Studio Professional for Mac,我似乎无法构建任何东西,因为我总是遇到同样的错误:

/Library/Frameworks/Mono.framework/Versions/4.8.0/lib/mono/xbuild/14.0/bin/Microsoft.CSharp.targets (CoreCompile target) ->

CSC: error CS0041: Unexpected error writing debug information -- 'Operation is not supported on this platform.'

 19 Warning(s)
 1 Error(s)

不确定要对我的项目进行哪些更改才能编译。

【问题讨论】:

  • 这似乎与生成 PDB 文件有关?这也打击了我,尽管在没有使用 visual-studio-mac 的情况下发生了这种情况(这是 xbuild 的问题,我只在一个项目上体验过这个问题,一个在 Windows 上构建的 web/asp.net 项目,然后在 Mac 上托管很好,但不是在 mac 上构建的。)
  • 这也是我发现的,只是还没有解决方法对我有用
  • 它还显示一个 nuget 打包的 csc.exe (Microsoft .NET) 用于编译而不是 mcs (Mono)
  • 您是否覆盖了CscToolExe 属性?默认应为mcs.exe。您在哪些项目中看到了这个问题?
  • 任何包含<package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net45" developmentDependency="true" /> 的项目都会有这个问题——修复可能需要针对mono/xamarin/mac 平台/env 修改这个编译器。作为一名长期的 .NET 开发人员,我不太在意使用哪个编译器,只要它可以工作并且生成的图像在编译完成后是可调试的。

标签: mono roslyn pdb-files xbuild visual-studio-mac


【解决方案1】:

我可以通过两种方式解决这个问题:

  1. HACK 通过从构建中删除调试符号(在 VS 窗口中:项目属性 -> 构建选项卡 -> 高级按钮 -> 将“调试信息”下拉列表更改为“无”-不确定 VS for Mac / Xamarin Studio 中的等价物)我为受影响项目的所有配置做了这个。拉回 macOS 环境,现在构建成功。当然没有调试信息,但它可以在不破坏任何部门的情况下工作。

  2. NON-HACK 根本原因是对 ASP.NET Web 项目使用 Roslyn 编译器/工具,并且此工具生成 PDB 文件而不是 MDB 文件,并且构建尝试生成 PDB 文件失败在 macOS 平台上(呃“平台不受支持”。)了解根本原因,我们还可以从受影响的项目中删除以下 nuget 包:

    <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net45" />
    <package id="Microsoft.Net.Compilers" version="1.0.0" targetFramework="net45" developmentDependency="true" />
    

目前还不清楚删除这两个软件包会牺牲什么。这确实允许我构建包含调试信息的受影响项目。受影响的项目仅包含 webapi 端点,没有使用 MVC 或 Razor 引擎。如果他们在此更改的上游遇到问题,很高兴听到其他人的经验。

HTH

【讨论】:

  • 我有同样的困境 - 我试图让 MONO 上的 CI 进程运行,但它在 Roslyn 相关的编译器问题上失败。我只有一个纯 WebAPI2 项目(带有 Angular2 前端)——我已经删除了所有 Roslyn 编译器链接,这似乎可以工作,但我并不完全理解其中的含义......
  • NON-HACK 选项对我来说效果很好,但我也应该从 csproj 中删除代码:
  • 在尝试构建 ASP.NET MVC (.NET v4.5.2) 时,我在 linux 容器主机上的 docker 中使用 mono:5.12.0.226 图像时遇到了同样的问题。选项 #2 解决了我的问题
【解决方案2】:

这是一个很快就会修复的错误。同时,您可以编辑您的 csproj 文件以添加

<DebugType Condition="'$(OS)' != 'Windows_NT'">portable</DebugType>

&lt;DebugType&gt;full&lt;/DebugType&gt;&lt;DebugType&gt;pdbonly&lt;/DebugType&gt; 之后

本质上,我们希望 Mac 上的 DebugType 属性为 portable,Roslyn 在非 Windows 平台上的 csc.exe 支持该属性,而不是 pdb

【讨论】:

  • 刚试过这个,在 VS 2016 for Mac 中构建时出现以下错误:“错误 CS1902:/debug 的选项 'portable' 无效;必须是完整的或 pdbonly (CS1902)”
  • 是否存在 connect() 问题或类似问题,我们可以用它来跟踪此错误,我仍在使用此处提到的其他解决方法之一,并且不确定是否/如何积压/跟踪(即。我们如何知道它何时按预期工作?)谢谢!
【解决方案3】:

要解决这个问题你需要做的:

  1. 选择项目

  2. 右键单击并选择选项

  3. 选择选项卡构建 -> 编译器
  4. 调试信息 -> 无

它解决了这个错误,但又给了我一个

“System.IO.FileNotFoundException 找不到文件“/Users/.../.../bin\roslyn\csc.exe”

【讨论】:

    【解决方案4】:

    在我删除该行之后

    <DebugType>pdbonly</DebugType>
    

    .csproj 文件,构建成功。

    【讨论】:

      【解决方案5】:

      希望不要来得太晚,我做了以下解决问题:

      1. 在解决方案中右键,选择“选项”,

      2. 选择选项卡构建 -> 配置,

      3. 在“配置 A”中。选择“调试”并禁用所有构建标记并单击接受,

      4. 清理、重建和执行项目。

      我希望这会有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-01-05
        • 1970-01-01
        • 1970-01-01
        • 2013-07-06
        • 1970-01-01
        • 2019-01-25
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多