更改 XmlSerializer 输出临时程序集的位置

Posted

技术标签:

【中文标题】更改 XmlSerializer 输出临时程序集的位置【英文标题】:Changing where XmlSerializer Outputs Temporary Assemblies 【发布时间】:2011-03-19 04:20:43 【问题描述】:

我正在尝试,因此我正在关注此类教程

http://www.hanselman.com/blog/ChangingWhereXmlSerializerOutputsTemporaryAssemblies.aspx

当我添加时

<system.xml.serialization> 
  <xmlSerializer tempFilesLocation="c:\\foo"/> 
</system.xml.serialization> 

我得到 tempFileLocation 不是有效属性。我正在使用 .net 4.0

名字改了还是怎么的?

【问题讨论】:

【参考方案1】:

您使用的是哪个版本的 .NET Framework?此未记录的功能仅在 Framework 2.0 的更新中引入,因此可能是您尚未获得所有更新?

这里是有关更新的 MS 支持网站的链接 http://support.microsoft.com/kb/934529

更新:我使用 VS2010 Framework 4.0 对此进行了测试。由于架构不包含此属性,IDE 确实显示以下警告。

Warning 13  The 'tempFilesLocation' attribute is not allowed.

我运行并编译了代码,它运行良好。这是我使用的配置文件。

<?xml version="1.0"?>
<configuration>
  <system.diagnostics>
    <switches>
      <add name="XmlSerialization.Compilation" value="1" />
    </switches>
  </system.diagnostics>

  <system.xml.serialization>
    <xmlSerializer tempFilesLocation="c:\foo"/>
  </system.xml.serialization>
  <startup><supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/></startup>
</configuration>

【讨论】:

我检查了反射器并且读取 tempFilesLocation 的代码在那里,所以它应该工作。明天我会在我的开发机器上检查以确认它是否正常工作。但请记住,这是未记录的功能,因此即使它今天有效,明天也可能不再有效。 是的,很可能,这种行为只是 Visual Studio 用于解析 web.config 的 XML 架构中的一个故障/遗漏 - 不会是第一个! @ChrisTaylor,我刚试过这个......它只将 .dll 和 .pdb 转储到 c://foo 文件夹中,而不转储 .cs 文件。知道为什么吗? (我用的是VS2012) 没关系,我明白了。在 VS2012(或更确切地说是 .NET4.5)中,xmlSerializer 元素必须具有另一个属性 useLegacySerializerGeneration="true" 才能生成 .cs 文件

以上是关于更改 XmlSerializer 输出临时程序集的位置的主要内容,如果未能解决你的问题,请参考以下文章

用于写出为序列化程序创建的临时程序集的Xml配置项

如何让 XmlSerializer 将布尔值编码为是/否?

如何以编程方式更改 C# 中的程序集名称

Visual Studio - 更改 NuGet 的临时文件输出目录

C# XmlSerializer DefaultAttribute 属性仍然为 nullables 序列化

无法在 Visual Studio 2017 中更改程序集的默认语言