问题标签 [sgen]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
19 浏览

assembly-binding-redirect - 强制 sgen.exe 使用程序集重定向

我有需要使用 SGen 的程序集。程序集正在为记录器使用另一个程序集,并且该程序集使用不同版本的引用 Microsoft.Extensions.Configuration.Abstractions。项目是新的 csproj 但完整的框架。

使用 sgen 我得到了

主程序集使用的是第 5 版的抽象库,但 SGen 忽略了它。

试图为此 dll 生成程序集绑定重定向,但它仍然不起作用。

为什么以及如何解决它?部署到 RTM 服务器时应用程序崩溃。

0 投票
0 回答
117 浏览

azure - “sgen.exe”无法在 Azure Pipelines 上的 VSBuild 中运行

在本地运行构建很好,没有任何问题。当我在 Azure Pipeline 上运行它时,它会出错。

详细的错误信息是

“SGen”任务的命令行太长。超过 32000 个字符的命令行可能会失败。尝试通过将对“SGen”的调用分解为多个调用来减少命令行的长度,每次调用的参数更少。[D:\a\1\s\eFetch.Web.Core\eFetch.Web.Core.csproj]

##[error]C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\Microsoft.Common.CurrentVersion.targets(3645,5):错误MSB6003:指定的任务可执行文件“sgen .exe”无法运行。System.ComponentModel.Win32Exception (0x80004005):文件名或扩展名太长

在此处输入图像描述

VSBuild 在 Azure 管道上

我们做了一些研究。通常出现的是将GenerateSerializationAssemblies设置为AutoOff。我们的项目已经处于Auto状态,因此我们将其设置为Off,但错误仍然存​​在。

有没有办法绕过一些 dll 引用的长路径?像下面这样

  • 参考:“C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\System.Xml.Linq.dll”
  • /reference:"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework.NETFramework\v4.7.2\Facades\System.Xml.ReaderWriter.dll"

另一种情况是多次调用 sgen.exe,但我们不确定如何执行此操作,因为 sgen.exe 在 VSBuild / msbuild.exe 中被调用。

理想情况下,我们宁愿不必关闭 GenerateXmlSerialization,而是让它正常工作。

0 投票
1 回答
289 浏览

c# - 强制 VS2022 使用 32 位版本的 msbuild

我目前正在研究将我们的工具集从 VS2013、15 和 17 迁移到 VS2022,以简化和减少构建我们的解决方案所需的软件数量。VS2022 拥有我们需要的所有部件,但是我正在努力获得通过 VS 本身构建的实际解决方案。

如果我在路径中使用附带的 32 位版本的 msbuild,则该解决方案构建得非常好C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe。但是该C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\amd64\MSBuild.exe版本(我猜是 VS22 使用的?)无法构建与通过 VS22 相同的错误。

重要的是要注意我们的解决方案/项目主要基于.net framework 2.0(不幸的是)并设置为x86平台。

我不断循环回到SGEN : error : An attempt was made to load an assembly with an incorrect format各种第一方和第三方 dll 上的以下错误。我一直在尝试以下组合:

  • 在和之间更改项目x86AnyCPU但无论项目及其参考配置如何,错误仍然会出现
  • 关闭Generate serialization assembly项目,因为我在某处看到人们通过这样做已经成功解决了错误。
  • 从(我们当前的设置)更改为ToolsVersion和其他版本4.0Current

如果可能的话,我正在有效地寻找一种强制 VS2022 使用 32 位 msbuild 的方法,因为它构建了整个解决方案而根本不做任何更改。

我还注意到 VS 输出窗口中的以下内容:

设置SdkToolsPath为 32 位版本会解决我的问题吗?我实际上一直无法找到在哪里进行此尝试。

谢谢!