``` Server Error in '/WebSubscribers' Application. Could not load file or assembly 'Ceoimage.Basecamp.XmlSerializers' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded. ```
我使用.NET Reflector查看了 XmlSerializer 的引用,发现它引用了 2.0 和 4.0 版本的
mscorlib
,以及 3.5 和 4.0 版本的 System.Data.Linq
。奇怪的是,它只使用了 4.0 版本的 System.Xml
。这可能就是我的问题所在。我该如何使 Web 应用程序能够使用这些 XmlSerializers 呢?当我简单地删除这些 XmlSerializers 时,Web 应用程序可以正常运行。这是一种选择,但我该如何强制 MSBUILD 为特定版本的 CLR 创建序列化程序呢?
以下是我添加到项目文件中的 MSBuild 任务,用于强制创建 XmlSerializers:
<Target Name="AfterBuild" DependsOnTargets="AssignTargetPaths;Compile;ResolveKeySource" Inputs="$(MSBuildAllProjects);@(IntermediateAssembly)" Outputs="$(OutputPath)$(_SGenDllName)">
<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>