Ada*_*ort 8 c# msbuild sgen visual-studio visual-studio-2022
我目前正在研究将我们的工具集从 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 输出窗口中存在以下内容:
Task attempted to find "sgen.exe" using the SdkToolsPath value "". Make sure the SdkToolsPath is set to the correct value and the tool exists in the correct processor specific location below it. (TaskId:109)
4> C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.8 Tools\x64\sgen.exe
Run Code Online (Sandbox Code Playgroud)
设置SdkToolsPath为 32 位版本可以解决我的问题吗?我实际上还没有找到在哪里可以尝试这样做。
谢谢你!
对我们有用的是SGenToolPath在 .csproj 文件中手动覆盖项目属性
添加以下内容:
<Target Name="SGENBeforeBuild" BeforeTargets="PrepareForBuild">
<PropertyGroup>
<!-- workaround for VS2022 x64 building serialization assemblies for x86 targets
, see /sf/ask/4953964291/ -->
<SGenToolPath>$(TargetFrameworkSDKToolsDirectory)</SGenToolPath>
</PropertyGroup>
</Target>
Run Code Online (Sandbox Code Playgroud)
有趣的是,我们必须对一些x86 目标项目(而不是全部)使用此解决方法。
事实上,您可能(我们确实)在使用许多 Visual Studio 构建工具步骤时遇到了类似的问题。以下 MSDN 页面列出了大多数 Visual Studio (2022) 构建工具的项目属性:
https://learn.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-properties ?view=vs-2022