【问题标题】:MSB6003 The specified task executable "sgen.exe" could not be run. The filename or extension is too longMSB6003 指定的任务可执行文件“sgen.exe”无法运行。文件名或扩展名太长
【发布时间】:2018-01-11 03:56:36
【问题描述】:

在 Windows 10 上运行 VS 2017 15.5.3。

收到此一般错误“无法运行指定的任务可执行文件“sgen.exe”。文件名或扩展名太长” 在 Release 配置和 X64 平台中构建项目时。 但它在 Debug 配置和 Any CPU 平台上构建良好。

正如https://developercommunity.visualstudio.com/content/problem/98090/vs-2017-153-error-the-specified-task-executable-sg.html中所建议的那样

能够构建它,但在将“生成序列化程序集”设置为关闭之后。

不要认为文件名很长。 有人会对此有所了解吗?

最好的问候,

达莫达尔

【问题讨论】:

    标签: c# msbuild visual-studio-2017


    【解决方案1】:

    MSB6003 指定的任务可执行文件“sgen.exe”无法运行。文件名或扩展名太长

    众所周知,sgen.exe 用于为指定程序集中的类型创建 XML 序列化程序集,以提高 XmlSerializer 在序列化或反序列化指定类型的对象时的启动性能。

    如果不需要 XML 序列化程序集,则应将GenerateSerializationAssemblies 的属性设置为Autooff默认情况下,SGen 仅适用于为“任何 CPU”生成的代理类型。这就是您在 Release 配置和 X64 平台上出现错误但在 Debug 配置和 Any CPU 平台上没有出现错误的原因。您可以右键单击您的项目->Properties->Build->GenerateSerializationAssemblies,将值设置为关闭。然后卸载你的项目,编辑项目,在项目文件中,可以找到如下代码行:

    <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
    

    但是,这行代码在条件Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "上存在,所以要解决这个问题,你可以手动将这行代码添加到其他条件中。您的项目文件配置最终将如下所示:

      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
       ...
        <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
      </PropertyGroup>
      <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x64' ">
        ...
        <GenerateSerializationAssemblies>Off</GenerateSerializationAssemblies>
      </PropertyGroup>
    

    请参阅Generating an Xml Serialization assembly as part of my build 了解更多详细信息。

    希望这会有所帮助。

    【讨论】:

    • 嗨 Leo Liu,很高兴知道为什么会这样!这在我们将 Generate serialization assembly: 从应用程序属性页面更改为 Off 时完成。正如问题中的链接所建议的那样。 ... Off‌​ssemblies> 我们正在寻找适当的修复方法。最好的问候,达莫达尔
    • 你好@Leo Liu-MSFT,正如我所提到的,解决方案已经存在,但我们正在寻找解释和干净的解决方案。最好的问候,达莫达尔
    • 这是一个救生员。我遇到了同样的问题,它的工作原理
    • 如何判断我是否需要 XML 序列化程序集?这将是有用的信息。
    【解决方案2】:
    1. 在解决方案资源管理器中,右键单击引发错误的项目;然后点击属性。
    2. 在打开的窗口中,单击左侧的“构建”选项卡。
    3. 找到“生成序列化程序集”选项。
    4. 将 ti 设置为 OFF 或 AUTO。

    【讨论】:

    • 欢迎来到 StackOverflow!虽然您的答案可能很好地解决了问题中提出的问题,但需要更多关于导致问题的原因以及您的答案如何解决问题的解释。考虑通过编辑来改进你的答案:D
    【解决方案3】:

    要找出原因,请执行以下操作:

    1. 转到工具/选项/项目和解决方案/构建和运行。
    2. 将 MSBuild 项目构建输出详细程度至少设置为“详细”。
    3. 构建您的项目。
    4. 转到输出窗口并在“显示输出”中选择“构建”。
    5. 搜索“SGEN.EXE”。这样你就会找到导致错误的命令行,比如这个:
    1>  C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\sgen.exe /assembly:C:\MySolutionFolder\Bin\x64\MyAssembly.dll /reference:"C:\Users\MyWindowsUser.nuget\packages\system.runtime.windowsruntime\4.6.0\buildTransitive\net461\..\..\ref\netstandard2.0\System.Runtime.WindowsRuntime.dll,C:\Users\MyWindowsUser.nuget\packages\system.runtime.windowsruntime.ui.xaml\4.6.0\build\net461\..\..\ref\netstandard2.0\System.Runtime.WindowsRuntime.UI.Xaml.dll,C:\Users\MyWindowsUser.nuget\packages\microsoft.toolkit.forms.ui.controls.webview\6.0.0\lib\net462\Microsoft.Toolkit.Forms.UI.Controls.WebView.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\mscorlib.dll,C:\Users\MyWindowsUser.nuget\packages\newtonsoft.json\6.0.1\lib\net45\Newtonsoft.Json.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\PresentationCore.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.ComponentModel.DataAnnotations.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Core.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.DataSetExtensions.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Data.Linq.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Design.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Device.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Drawing.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Net.Http.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Runtime.Remoting.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\Facades\System.ValueTuple.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Windows.Forms.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xaml.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\System.Xml.dll,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.7.2\UIAutomationClient.dll,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.AI.MachineLearning.MachineLearningContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.AI.MachineLearning.Preview.MachineLearningPreviewContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Activation.ActivatedEventsContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Activation.ActivationCameraSettingsContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Activation.ContactActivatedEventsContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Activation.WebUISearchActivatedEventsContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Background.BackgroundAlarmApplicationContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Calls.Background.CallsBackgroundContract.winmd,C:\Users\MyWindowsUser.nuget\packages\microsoft.windows.sdk.contracts\10.0.18362.2005\ref\netstandard2.0\Windows.ApplicationModel.Calls.CallsPhoneContract.winmd," /compiler:/keycontainer:VS_KEY_0011223344556677 /compiler:/platform:AnyCPU
    

    为简洁起见,我将其缩短了。如您所见,有很多参考资料。由于它们每个都使用完整路径,因此语句的总长度很可能超过最大命令行长度,似乎是 32,000:

    1>C:\MySolutionFolder\MyProject.csproj(1806,5): warning MSB6002: The command-line for the "SGen" task is too long. Command-lines longer than 32000 characters are likely to fail. Try reducing the length of the command-line by breaking down the call to "SGen" into multiple calls with fewer parameters per call.
    1>C:\SBCZ\Br\IS-13869_MWV_P\w1\Source\ITML.SC.Global\ITML.SC.Global.Resources\ITML.SC.Global.Resources\ITML.SC.Global.Resources.csproj(1806,5): error MSB6003: The specified task executable "sgen.exe" could not be run. System.ComponentModel.Win32Exception (0x80004005): The filename or extension is too long
    

    我不确定如何将此调用拆分为多个调用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-11-15
      • 2016-11-24
      • 2012-05-18
      • 1970-01-01
      • 2021-08-08
      • 2013-01-21
      相关资源
      最近更新 更多