如何在Msbuild中设置SGEN工具路径以针对3.5框架

2023-12-28

我刚刚将一个项目从 VS2008 升级到 VS2010,但我仍然以 3.5 框架为目标。

在我的项目文件中,我有一个自定义任务来运行 SGEN 以生成 XmlSerializers.dll。然而,正在运行的 sgen 版本针对的是 4.0 框架。结果,当我运行我的应用程序时,我收到错误消息:

“无法加载文件或程序集“XXXX.XXXX.XmlSerializers”或其依赖项之一。该程序集是由比当前加载的运行时更新的运行时构建的,因此无法加载。”

Sgen 任务如下所示:

  <Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
    <!-- Delete the file because I can't figure out how to force the SGen task. -->
    <Delete Files="$(TargetDir)$(TargetName).XmlSerializers.dll" ContinueOnError="true" />
    <SGen BuildAssemblyName="$(TargetFileName)" BuildAssemblyPath="$(OutputPath)" References="@(ReferencePath)" ShouldGenerateSerializer="true" UseProxyTypes="false" KeyContainer="$(KeyContainerName)" KeyFile="$(KeyOriginatorFile)" DelaySign="$(DelaySign)" ToolPath="$(SGenToolPath)">
      <Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly" />
    </SGen>
  </Target>

有的是工具路径=“$(SGenToolPath)”。如何让它运行针对 3.5 的版本?

有一个类似的问题here https://stackoverflow.com/questions/2746372/sgen-doesnt-work-after-upgrading-from-vs2008-to-vs2010但这对我没有多大帮助。


我通过手动配置 ToolPath 以指向旧版本(版本 2.0.50727.3038)的 sgen.exe 解决了这个问题

在我的机器上,它位于:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin

我将 ToolPath 属性更改为:

ToolPath="C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin"

这解决了问题。

默认情况下,它似乎在以下位置运行新的 4.0 框架版本:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools

希望这对其他人有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在Msbuild中设置SGEN工具路径以针对3.5框架 的相关文章

随机推荐