问题标签 [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.
assembly-binding-redirect - 强制 sgen.exe 使用程序集重定向
我有需要使用 SGen 的程序集。程序集正在为记录器使用另一个程序集,并且该程序集使用不同版本的引用 Microsoft.Extensions.Configuration.Abstractions。项目是新的 csproj 但完整的框架。
使用 sgen 我得到了
主程序集使用的是第 5 版的抽象库,但 SGen 忽略了它。
试图为此 dll 生成程序集绑定重定向,但它仍然不起作用。
为什么以及如何解决它?部署到 RTM 服务器时应用程序崩溃。
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设置为Auto或Off。我们的项目已经处于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,而是让它正常工作。
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 上的以下错误。我一直在尝试以下组合:
- 在和之间更改项目
x86
,AnyCPU
但无论项目及其参考配置如何,错误仍然会出现 - 关闭
Generate serialization assembly
项目,因为我在某处看到人们通过这样做已经成功解决了错误。 - 从(我们当前的设置)更改为
ToolsVersion
和其他版本4.0
Current
如果可能的话,我正在有效地寻找一种强制 VS2022 使用 32 位 msbuild 的方法,因为它构建了整个解决方案而根本不做任何更改。
我还注意到 VS 输出窗口中的以下内容:
设置SdkToolsPath
为 32 位版本会解决我的问题吗?我实际上一直无法找到在哪里进行此尝试。
谢谢!