gpt4 book ai didi

.net - MSBuild 使用错误版本的 sgen.exe 生成 XmlSerializer dll?

转载 作者:行者123 更新时间:2023-12-01 19:02:44 27 4
gpt4 key购买 nike

我正在使用 TeamCity 运行 MSBuild 脚本,该脚本可清理并重建我们的解决方案之一。当我部署由此进程生成的 dll 时,Web 服务器返回有关 [MyType].XmlSerializer.dll 的错误:“此程序集是由比当前加载的运行时更新的运行时生成的,无法加载。”以下是我到目前为止的笔记:

  • 该解决方案是面向 .Net Framework 3.5 的 Visual Studio 2010 解决方案。
  • TeamCity 旨在模仿这一点。它使用 MSBuild 版本 -“.Net Framework 4.0”和 MSBuild ToolsVersion -“3.5”进行设置。这告诉 TeamCity 使用 MSBuild 4.0,但以 3.5 框架为目标。由于我们使用的是 Visual Studio 2010,因此必须使用 MSBuild 4.0,否则它会产生其他错误(与 VS2010 使用的新警告代码相关)。 这似乎工作正常,并为大多数 dll 生成 .Net 3.5 dll。
  • MSBuild 进程调用 resgen.exe 和 sgen.exe 分别生成资源文件和 XmlSerializer 文件。由于我们使用的是 MSBuild 4.0,因此它会查找 Windows SDK 7.1。我安装了那个版本。我还安装了 Windows SDK 7.0。
  • 无论我有什么框架有针对性,构建过程被调用WinSDK 7.1 下的 sgen.exe 和产生.Net Framework 4.0[MyType].XmlSerializer.dll。这是正确吗?

据我所知,我的选择是:

  • 如果我更改内容以针对较旧的 v3.5 MSBuild 工具,VS2010 会在解决方案文件中发出警告,提示 MSBuild 3.5 会阻塞并中断构建。这实际上不是一个选择。
  • 尝试将注册表中的路径更改为工具 as discussed in this topic ,我没有看到任何变化。
  • 在服务器上安装VS2010。显然 VS2010 使用了中间 WinSDK v7.0A,他们获得它的唯一方法是在服务器上安装 VS2010。这实际上不是一个选择。
  • 将项目更改为不生成 XmlSerializer.dll。这可行,但看起来很俗气,因为它并没有真正解决问题,而且我还担心性能影响。

我错过了什么吗?还有其他我错过的选择吗?

最佳答案

尝试将名为 SGenToolPath 的属性设置为您要使用的 SGen 工具。

Microsoft.Common.targets 文件调用 SGen 任务,如下所示:

    <SGen
BuildAssemblyName="$(TargetFileName)"
BuildAssemblyPath="$(IntermediateOutputPath)"
References="@(ReferencePath)"
ShouldGenerateSerializer="$(SGenShouldGenerateSerializer)"
UseProxyTypes="$(SGenUseProxyTypes)"
KeyContainer="$(KeyContainerName)"
KeyFile="$(KeyOriginatorFile)"
DelaySign="$(DelaySign)"
**ToolPath="$(SGenToolPath)"**
SdkToolsPath="$(TargetFrameworkSDKToolsDirectory)"
EnvironmentVariables="$(SGenEnvironment)"
SerializationAssembly="$(IntermediateOutputPath)$(_SGenDllName)"
Platform="$(SGenPlatformTarget)"
Types="$(SGenSerializationTypes)">

<Output TaskParameter="SerializationAssembly" ItemName="SerializationAssembly"/>

</SGen>

我依稀记得必须为 64 位版本执行此操作。如果您有任何问题,请添加评论。

关于.net - MSBuild 使用错误版本的 sgen.exe 生成 XmlSerializer dll?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5252340/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com