Actualmente estoy investigando la migración de nuestro conjunto de herramientas de VS2013, 15 y 17 a solo VS2022 para optimizar y reducir la cantidad de software necesario para crear nuestra solución. VS2022 tiene todas las piezas que necesitamos, sin embargo, estoy luchando por obtener la solución real para construir a través de VS.
La solución funciona completamente bien si utilizo la versión de 32 bits de msbuild que la acompaña en la ruta C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\MSBuild.exe . Sin embargo, la versión C:\Program Files\Microsoft Visual Studio\2022\Community\Msbuild\Current\Bin\amd64\MSBuild.exe (¿que supongo que usa VS22?) no se compila con los mismos errores que a través de VS22.
Es importante tener en cuenta que nuestra solución/proyectos se basan principalmente en .net framework 2.0 (lamentablemente) y están configurados para la plataforma x86 .
Sigo volviendo al siguiente error SGEN : error : An attempt was made to load an assembly with an incorrect format en varios dll de origen y de terceros. He estado probando combinaciones de ida y vuelta de lo siguiente:
x86 y AnyCPU pero el error aún se produce independientemente del proyecto y las configuraciones de sus referenciasGenerate serialization assembly en los proyectos, ya que he visto en alguna parte que las personas han tenido éxito al resolver el error al hacer esto.ToolsVersion de 4.0 (nuestra configuración actual) a Current y otras versionesEstoy buscando efectivamente una manera de obligar a VS2022 a usar el msbuild de 32 bits si eso es posible, ya que crea la solución completa sin realizar ningún cambio.
También noté lo siguiente en la ventana de salida de 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 ¿Configurar SdkToolsPath en la versión de 32 bits resolvería mi problema? En realidad, no he podido encontrar dónde hacer esto para probarlo.
¡Gracias!
Lo que funcionó para nosotros es anular la propiedad del proyecto SGenToolPath manualmente en los archivos .csproj
Agregue lo siguiente:
<Target Name="SGENBeforeBuild" BeforeTargets="PrepareForBuild"> <PropertyGroup> <!-- workaround for VS2022 x64 building serialization assemblies for x86 targets , see https://stackoverflow.com/questions/70770918/forcing-vs2022-to-use-32-bit-version-of-msbuild --> <SGenToolPath>$(TargetFrameworkSDKToolsDirectory)</SGenToolPath> </PropertyGroup> </Target>Curiosamente, tuvimos que usar esta solución para algunos proyectos de orientación x86, no para todos.
De hecho, es posible que (nosotros lo hicimos) se encuentre con un problema similar con una serie de pasos de la herramienta de compilación de Visual Studio. Aquí hay una página de MSDN que enumera las propiedades del proyecto para la mayoría de las herramientas de compilación de Visual Studio (2022):
https://docs.microsoft.com/en-us/visualstudio/msbuild/common-msbuild-project-properties?view=vs-2022